$replacex checks the entire string one character at a time against all of the strings-to-be-replaced
Yes, that is how it works: it moves through the string a character at a time, from beginning to end, checking for a match at that point in the string against all replacement strings. When a replacement is made, it increments the pointer to the end of the replacement and continues. It never searches the string from the beginning again. It has worked this way ever since it was created in 2004.
I think many of you are expecting it to behave in this way: search the whole string for matches against the first replacement string and perform replacements as necessary. Remember on a per character basis which part of the string was modified. Then do the same thing with the next replacement string, ensuring that no previously modified characters are used in any matching.
Anyone interested in coming up with a C function that does that? :-)