Javascript 将每个单词的首字母大写以及连字符或破折号之后的每个单词的首字母大写的方法
Javascript method to capitalize the first letter of every word and also every word after hyphen or dash
我需要一个 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{1}\w{1}):匹配一个 space
之后的一个字符
- 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; }
我需要一个 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{1}\w{1}):匹配一个 space 之后的一个字符
- 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; }