The data modify string sub command [<start>] and [<end>] don't allow negative values.
Generally you would expect these slices to act more more like nbt lists that can use negative values.
Example: SomeList[-1]
However a command like this:
/data modify block ~ ~ ~ SomeString set string block ~ ~ ~ SomeOtherString -2 -1
Gives an error and is inconsistent with this behavior.
This is a feature request.