regex Javascript方法大写每个单词的第一个字母,也每个单词后面的连字符或破折号

yhived7q  于 2022-11-26  发布在  Java
关注(0)|答案(3)|浏览(108)

我需要一个JavaScript方法来将字符串中每个单词的第一个字母转换为大写字母,如下所示:mike tyson wayne转换为Mike Tyson Wayne。该方法还应该能够将连字符后面的第一个单词转换为大写字母,如下所示:mike-tyson wayneMike Tyson Wayne。该方法还应该能够将大写单词转换为大写单词,如下所示:从MIKE-TYSON WAYNEMike 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());

问题是上面的方法不适用于破折号后面的字符串,但仍然适用于空格后面的字符串。

niwlg2el

niwlg2el1#

  • \d是一个数字,因此您的表达式匹配一个-或后跟.的数字...
  • {1}表示出现一次,这是默认值...

请尝试以下操作:

/(^\w)|([-\s]\w)/g
sbdsn5lh

sbdsn5lh2#

/(?<=\b)\w/g/(?<=\b)\p{L}/gu这样的正则表达式......它们都使用了单词边界的正向后查找,但使用Unicode property escapes的第二个变体可能是更通用但可行的方法......
第一个

kxe2p93d

kxe2p93d3#

let text = "UNIVERSITY OF CALIFORNIA-SAN DIEGO";
let pattern = /\w*/g;
let result = text.replace(pattern, function(word){
    return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
});

//result = University Of California-San Diego

相关问题