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

Javascript method to capitalize the first letter of every word and also every word after hyphen or dash

我需要一个 JavaScript 方法来允许我将字符串中每个单词的首字母转换为大写字母,如下所示:mike tyson wayneMike Tyson Wayne。 该方法还应该能够将连字符后的第一个单词转换为大写字母,如下所示:mike-tyson wayneMike Tyson Wayne。 该方法还应该能够将大写单词转换为大写单词,如下所示:MIKE-TYSON WAYNEMike Tyson Wayne.

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

text.replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase())

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

我将这个表达式添加到表达式中,该表达式应该满足 space 之后字符串的第一个字母。表达式为 (?:- |\d\. ).*

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

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

问题是上面的方法不适用于破折号之后的字符串,但仍然适用于 space.

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

尝试这样的事情:

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

像...这样的正则表达式 /(?<=\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 可能是更通用但可行的方法...

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