我可以使用此功能将普通字符串更改为标题大小写。
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
我不确定如何将这样的字符串设为标题大小写,
maureen o'hara -> Maureen O'Hara
maureen macnamee -> Maureen MacNamee
Maureen mctavis ->Maureen McTavis
这可能吗?
答案 0 :(得分:2)
您可以使用此代码:
function nameToTC(input) {
return input.replace(/\b(ma?c)?(\w)(\w*)/ig, function (m, grp1, grp2, grp3) {
if (grp1) {
return grp1.charAt(0).toUpperCase() + grp1.substr(1).toLowerCase() + grp2.toUpperCase() + grp3.toLowerCase();
}
else {
return grp2.toUpperCase() + grp3.toLowerCase();
}
});
}
console.log(nameToTC('maureen o\'hara'));
console.log(nameToTC('maureen macnamee'));
console.log(nameToTC('Maureen mctavis'));
结果:
Maureen O'Hara
Maureen MacNamee
Maureen McTavis
正则表达式 - \b(ma?c)?(\w)(\w*)
- 首先将字边界与\b
匹配,然后可选地匹配并捕获到第1组mac
或Mc
等等{{1}然后匹配并捕获到第2组中的一个字母数字符号((ma?c)?
),然后匹配并捕获到属于当前单词的{0}或更多个最终字母数字字符((\w)
)。
在回调函数中,我们检查是否设置了第1组,如果是,我们将(\w*)
或mc
大写,然后是其余部分。如果未设置第1组,我们不处理该部分,仅将第2组资本化。
答案 1 :(得分:1)
正则表达式很有趣,但是如果你想尝试一种更具人性化的方法,试试这个:
function toTitleCase(str)
{
return str.replace(/\w+/g, function(txt){
if (txt.substr(0,2) === "mc") return "Mc" + txt.charAt(2).toUpperCase() + txt.substr(3).toLowerCase();
else if (txt.substr(0,3) === "mac") return "Mac" + txt.charAt(3).toUpperCase() + txt.substr(4).toLowerCase();
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
}
它应该有效并且“更容易”扩展。