What is wrong with my thinking?
You're finding a sequence of title-cased words, but that won't pick up cases where there are non-title-cased words.
You can test if the entire input is not title case with the simple regexp:
const tests = ['This Is A Cat', 'This is a cat', 'This Is A cat'];
// Is there any occurrence of a word break followed by lower case?
const re = /\b[a-z]/;
tests.forEach(test => console.log(test, "is not title case:", re.test(test)));
If you really want to check that the input is title case, then you'll need to match the string from beginning to end, as mentioned in a comment (i.e., "anchor" the regex):
const tests = ['This Is A Cat', 'This is a cat', 'This Is A cat'];
// Is the entire string a sequence of an upper case letter,
// followed by other letters and then spaces?
const re = /^\s*([A-Z]\w*\s*)*$/;
tests.forEach(test => console.log(test, "is title case:", re.test(test)));
What is title case?
Strictly speaking, however, articles, conjunctions, and prepositions are not upper-cased unless they start the title. Therefore, a better test would be:
const re = /^\s*[A-Z]\w*\s*(a|an|the|and|but|or|on|in|with|([A-Z]\w*)\s*)*$/;