我可以使用它来将普通字符串更改为标题大小写。
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
这可能吗?
最佳答案
您可以使用此代码:
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
匹配单词边界,然后可选地匹配并用(ma?c)?
捕获到第1组mac
或Mc
等,然后匹配并捕获到第2组一个字母数字符号((\w)
) 然后匹配并捕获到第 3 组中属于当前单词的 0 个或更多最后的字母数字字符(使用 (\w*)
)。
在回调函数中,我们检查是否设置了第 1 组,如果是,我们将 mc
或 mac
大写,然后是其余部分。如果未设置 Group 1,则不处理该部分,仅将 Group 2 大写。
关于javascript - 将包含 ' , 的字符串更改为 TitleCase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33542035/