The whole tool is the tokeniser
Emitting camelCase once you have the words is three lines. Getting the words out of an identifier like parseHTTPResponse2XML is the part that separates a working converter from one that produces nonsense, and it fails in a specific way: splitting on every lower-to-upper boundary turns that input into nine fragments, one per capital.
The rule that handles acronyms is to split before the last capital of a run that is followed by a lowercase letter, because that capital begins the next word. So parseHTTPResponse becomes three words, and XMLHttpRequest becomes three as well. Digits are their own boundary in both directions, which is what a constant-case output requires and what a naive splitter never produces.