(This version just skips any part that does not match /[A-Z][a-z]*/; season to taste.)

Dealing with "AStringWithFTP" is trickier, at least without a dictionary. The only heuristic I may suggest is to treat sequences of upper-case characters as a word of its own if in final position or if preceding an uppercase-lowercase sequence: