我需要一个JavaScript方法来将字符串中每个单词的第一个字母转换为大写字母,如下所示:mike tyson wayne
转换为Mike Tyson Wayne
。该方法还应该能够将连字符后面的第一个单词转换为大写字母,如下所示:mike-tyson wayne
到Mike Tyson Wayne
。该方法还应该能够将大写单词转换为大写单词,如下所示:从MIKE-TYSON WAYNE
到Mike Tyson Wayne
。
我已经尝试过使用从另一个线程获得的正则表达式的方法:
text.replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase())
- (^\w{1}):匹配字符串的第一个字符
- |:或
- (\s\w):匹配一个空格后一个字符
- g:全部匹配
- 匹配=〉匹配.toUpperCase():所以用可带函数代替;用大写匹配替换匹配
它适用于将字符串的第一个字母转换为大写字母,也适用于空格后的字符串的第一个字母。
我在表达式中添加了这个表达式,该表达式应该满足字符串的第一个字母在空格之后的要求。
结合第一个表情,变成了:
text.replace(/(^\w{1})|(\s{1}\w{1})|(?:- |\d\. ).*/g, match => match.toUpperCase());
问题是上面的方法不适用于破折号后面的字符串,但仍然适用于空格后面的字符串。
3条答案
按热度按时间niwlg2el1#
\d
是一个数字,因此您的表达式匹配一个-
或后跟.
的数字...{1}
表示出现一次,这是默认值...请尝试以下操作:
sbdsn5lh2#
像
/(?<=\b)\w/g
或/(?<=\b)\p{L}/gu
这样的正则表达式......它们都使用了单词边界的正向后查找,但使用Unicode property escapes的第二个变体可能是更通用但可行的方法......第一个
kxe2p93d3#