提问者:小点点

Javascript方法将每个单词的第一个字母以及连字符或破折号后的每个单词大写


我需要一个JavaScript方法来允许我将字符串中每个单词的第一个字母转换成这样的大写字母:迈克·泰森·韦恩迈克·泰森·韦恩。该方法还应该能够将连字符后的第一个单词转换为大写字母,如下所示:mike-tyson wayne转换为Mike Tyson Wayne。该方法还应该能够将大写单词转换为大写单词,如下所示:MIKE-TYSON WAYNEMike Tyson Wayne

我已经尝试过使用从另一个线程获得的正则表达式的方法:

text.replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase())
  • (^\w{1}):匹配字符串的第一个字符

它用于将字符串的第一个字母转换为大写字母,也适用于空格后字符串的第一个字母。

我在表达式中添加了这个表达式,该表达式应该适合空格后字符串的第一个字母。表达式是(?:-|\d\)*

结合第一个表达,它变成了:

text.replace(/(^\w{1})|(\s{1}\w{1})|(?:- |\d\. ).*/g, match => match.toUpperCase());

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


共2个答案

匿名用户

  • \d是一个数字,所以您的表达式匹配一个-或一个后面跟着的数字。...
  • {1}意味着一次出现,无论如何都是默认的...

试着这样做:

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

匿名用户

一个正则表达式像.../(?

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; }