Simple transformations can easily become complex to do with regex, so I've started using vim macros instead.
John Smith > Smith, John Anna Peterson > Peterson, Anna
I can write:
(.) (.)
And replace with:
\2, \1
Not sure if that’s part of some “official” regex spec but it works more or less everywhere.
(Of course if it was an actual list of names I’d have to be a lot more intelligent with double names etc.)
Regular expression libraries then often can use these boundaries, for the whole match and for groups, for transform the string (e.g. replacing what was matched by a group with some other content).