![](/img/trans.png)
[英]Using replace and regex to capitalize first letter of each word of a string in JavaScript
[英]Javascript capitalize first letter of each word in a string only if lengh > 2
我查看了有关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();
});
有一个解决方案可以将两个正则表达式合二为一吗?
这必须做的工作:
str = str.toLowerCase().replace(/\b[a-z](?=[a-z]{2})/g, function(letter) {
return letter.toUpperCase(); } );
[编辑]
上面的例子有点天真,因为它假设字符串中只有字母,并没有考虑字边界\\b
可以匹配单词字符[a-zA-Z0-9_]
和a之间的限制非单词字符或锚。 因此,为了更严格,最好写:
str = str.toLowerCase().replace(/([^a-z]|^)([a-z])(?=[a-z]{2})/g, function(_, g1, g2) {
return g1 + g2.toUpperCase(); } );
如果你想这样做,但这一次,包括字符串的第一个字母(无论后面的字母数),你可以使用这个:
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(); } );
试试这个:
var str = str.toLowerCase().replace(/\b\w{3,}/g, function (l) {
return l.charAt(0).toUpperCase() + l.slice(1);
});
也许使用一个函数来使它更干净
var capitalize1st = function(str){
str = str || '';
// string length must be more than 2
if(str.length<3){
return str;
}
return str[0].toUpperCase()+str.slice(1);
}
var splitWordsAndCap1st = function(str){
str = str || '';
var words = str.match(/\S+/g);
for(var i=0;i<words.length;i++){
words[i] = capitalize1st(words[i]);
}
return words.join(' ');
}
splitWordsAndCap1st("I would like to capitalize first letter of each word in a string");
这是一个更简单的解决方案,可以完成这项工作。
const capitalize = (str) =>
str.toLowerCase().replace(/\w{3,}/g, (match) =>
match.replace(/\w/, (m) => m.toUpperCase()));
不需要正则表达式(只需要一个小的捕获空格),你可以这样做
使用Javascript
function titleCaseLengthGt2(string) {
var array = string.split(/(\s+)/),
length = array.length,
i = 0,
word;
while (i < length) {
//array[i] = array[i].toLowerCase(); // make words lowercased first if you want
word = array[i];
if (word.length > 2) {
array[i] = word.charAt(0).toUpperCase() + word.slice(1);
}
i += 1;
}
return array.join("");
}
console.log(titleCaseLengthGt2("i want to be titelised"));
产量
i Want to be Titelised
如果字长> 2,要将字符串中每个单词的首字母大写,我用于英文文本:
l_text = l_text.toLowerCase().replace(/(?=\b)([a-z])(?=[a-z]{2})/g,
function(g0) {return (g0.toUpperCase());});
在现实生活中,“字长> 2”的规则是不够的。
要用法语来大写城镇名称,我必须排除一些像这个样本中的单词:
l_text = "Bourg-en-Bresse, NEUILLY SUR SEINE, enghien-les-bains";
l_text = l_text.toLowerCase().replace(/(?=\b)(?!(?:d|en|les|sous|sur)\b)([a-z])/g,
function(g0) {return (g0.toUpperCase());});
对于更复杂的情况,您可以组合负前瞻断言(?!(:| | en | les | sous | sur)\\ b)和正向前瞻断言(?= [az] {2})。
要处理非标准字边界和z范围之外的字符,您可以使用单词边界和特定于上下文的字符集:
/(?:^|[\s'\-])(?!(?:d|en|les|sous|sur)[\s'\-])([a-zàâéèêïôùûç])/g
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.