When using the titleCase function the first letter in each word is replaced (wanted result) but the spaces are deleted (unwanted result).
The moment I use a use the toUpperCase() on the replacing value (like in the commented out row) the spaces are not deleted (wanted result)!
What is going on!? Why?
Note: I solved the challenge in 2 much less elegant ways and stumbled on this question when trying to understand the third given solution in the hints section.
function titleCase(str) {
return str.toLowerCase().replace(/(^|\s)\S/g, a => 'x');
// return str.toLowerCase().replace(/(^|\s)\S/g, a => a.toUpperCase());
}
console.log(titleCase("I'm a little tea pot"));
Your expression matches a space (or the beginning of a line) followed by a non-space. Both of those characters are part of the pattern, so they are both being replaced by the single character “x”. When you use toUpper you are calling a method that replaces letters with uppercase by does not change non-letter characters.
In the first line you are replacing a two character string with a single character. In the second case you are replacing a two character string with a two character string.