'Javascript method to capitalize the first letter of every word and also every word after hyphen or dash
I need a JavaScript method to allows me to convert the first letter of every word in a string to a capital letter like this: mike tyson wayne to Mike Tyson Wayne.
The method should also be able to convert the first word after an hyphen to capital letter like this: mike-tyson wayne to Mike Tyson Wayne.
The method should also be able to convert uppercase words to capitalize words like this: MIKE-TYSON WAYNE to Mike Tyson Wayne.
I have tried this method using regular expression gotten from another thread:
text.replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase())
- (^\w{1}): match first char of string
- |: or
- (\s{1}\w{1}): match one char that came after one space
- g: match all
- match => match.toUpperCase(): replace with can take function, so; replace match with upper case match
It worked for converting the first letter of a string to capital letter and also works for the first letter of a string after space.
I added this expression that was supposed to cater for first letter of a string after space to the expression. The expression is (?:- |\d\. ).*
Combined with the first expression, it became:
text.replace(/(^\w{1})|(\s{1}\w{1})|(?:- |\d\. ).*/g, match => match.toUpperCase());
The problem is that the method above doesn't work for the strings after the dash but still works for the strings after space.
Solution 1:[1]
\dis a digit, so your expression matches a-or a digit followed by....{1}means one occurrence, which is the default anyways...
Try something like this:
/(^\w)|([-\s]\w)/g
Solution 2:[2]
A regex like ... /(?<=\b)\w/g or /(?<=\b)\p{L}/gu ... which both use a positive lookbehind for word boundaries but the second variant making use of Unicode property escapes might be a more generic yet viable approach ...
console.log(
"mike-tyson wayne"
.replace((/(?<=\b)\w/g), match => match.toUpperCase())
);
console.log(
"MIKE-TYSON WAYNE"
.toLowerCase()
.replace((/(?<=\b)\p{L}/gu), match => match.toUpperCase())
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Usagi Miyamoto |
| Solution 2 |
