我找到了一个很好的RegExp来将“小写名称”转换为“标题案例名称”,但我注意到它无法正常使用像“Jean-Marie”这样的法语名称,它应该保留并且不会被转换进入“让 - 玛丽”等等。
所以,这里是使用RegExp的整个函数:
function titleCase(source) {
return source.replace(/\w\S*/g, function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
}
所以,问题是:如何修改RegExp以保护法语名称?
非常感谢您的答案!
答案 0 :(得分:1)
这很有效。有关详细信息refer this
以下正则表达式也适用于正常情况。
vignesh raja
= Vignesh Raja
var name = "vignesh-raja";
name = name.replace(/\b\w+/g, function(str) {
return str.charAt(0).toUpperCase() + str.substr(1);
});
console.log(name);

答案 1 :(得分:0)
replace方法可以将函数作为具有多个参数的第二个参数。
来自文档:
p1, p2, ...
第n个带括号的子匹配字符串,提供了第一个参数 replace()是一个RegExp对象。 (对应上面的1美元,2美元等。) 例如,如果给出了/(\ a +)(\ b +)/,则p1是\ a +的匹配,并且 p2代表\ b +。
你可以做的是使用像(\w)(\w+(?:-\w+)*)
这样的正则表达式,它将带有连字符的单词匹配为1个单词。然后你可以捕获第一组中的第一个字符,以及第二组中匹配的其余部分。
然后使用toUpperCase转换该字符并返回连接名称。
例如:
function titleCase(source) {
return source.replace(/(\w)(\w+(?:-\w+)*)/g, function(txt, p1, p2) {
return p1.toUpperCase() + p2.toLowerCase();
});
}
var titles = [
"lower case name",
"Jean-Marie",
"JEAN-MARIE",
"tEST TEST-TEST tesT"
];
for (var i = 0; i < titles.length; i++) {
console.log(titles[i] + " ---> " + titleCase(titles[i]));
}
&#13;
注意强>
将\w
用于名称匹配[A-Za-z0-9_]