只有当lengh> 2时,Javascript才会将字符串中每个单词的首字母大写

Con*_*eca 9 javascript regex

我查看了有关StackOverflow中大写的一些问题和答案,但无法找到有关我的问题的答案.

我想在字符串长度> 2时将字符串中的每个单词的首字母大写.

我的临时解决方案是:

var str =  str.toLowerCase().replace(/\b[a-z]/g, function (letter) {
                return letter.toUpperCase();
            }).replace(/\b\w{1,2}\b/g, function (letter) {
                return letter.toLowerCase();
            });
Run Code Online (Sandbox Code Playgroud)

有一个解决方案可以将两个正则表达式合二为一吗?

Cas*_*yte 18

这必须做的工作:

str = str.toLowerCase().replace(/\b[a-z](?=[a-z]{2})/g, function(letter) {
    return letter.toUpperCase(); } );
Run Code Online (Sandbox Code Playgroud)

[编辑]

上面的例子有点幼稚,因为它假定字符串中只有字母,并且没有考虑字边界\b可以匹配单词字符[a-zA-Z0-9_]和非单词字符或锚点之间的限制.因此,为了更严格,最好写:

str = str.toLowerCase().replace(/([^a-z]|^)([a-z])(?=[a-z]{2})/g, function(_, g1, g2) {
    return g1 + g2.toUpperCase(); } );
Run Code Online (Sandbox Code Playgroud)

如果你想这样做,但这一次,包括字符串的第一个字母(无论后面的字母数),你可以使用这个:

str = str.toLowerCase().replace(/([^a-z])([a-z])(?=[a-z]{2})|^([a-z])/g, function(_, g1, g2, g3) {
    return (typeof g1 === 'undefined') ? g3.toUpperCase() : g1 + g2.toUpperCase(); } );
Run Code Online (Sandbox Code Playgroud)