我查看了有关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();
});
有一个解决方案可以将两个正则表达式合二为一吗?
6 回答
这必须做的工作:
[编辑]
上面的例子有点幼稚,因为它假定字符串中只有字母,并且没有考虑字边界
\b
可以匹配单词字符[a-zA-Z0-9_]
与非单词字符或锚点之间的限制 . 因此,为了更严格,最好写:如果你想这样做,但这一次,包括字符串的第一个字母(无论后面的字母数),你可以使用这个:
试试这个:
也许使用一个函数来使它更干净
不需要正则表达式(只需要一个小的捕获空格),你可以这样做
使用Javascript
产量
在jsfiddle
如果字长> 2,要将字符串中每个单词的首字母大写,我用于英文文本:
在现实生活中,“字长> 2”的规则是不够的 .
要用法语来大写城镇名称,我必须排除一些像这个样本中的单词:
对于更复杂的情况,您可以组合负前瞻断言(?!(:| en | les | sous | sur)\ b)和正向前瞻断言(?= [a-z] {2}) .
要处理非标准单词边界和a-z范围之外的字符,您可以使用单词边界和特定于上下文的字符集:
这是一个更简单的解决方案,可以完成这项工作 .