我查看了有关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)
归档时间: |
|
查看次数: |
17324 次 |
最近记录: |