javascript - 将包含 ' , 的字符串更改为 TitleCase

标签 javascript regex

我可以使用它来将普通字符串更改为标题大小写。

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组macMc等,然后匹配并捕获到第2组一个字母数字符号((\w)) 然后匹配并捕获到第 3 组中属于当前单词的 0 个或更多最后的字母数字字符(使用 (\w*))。

在回调函数中,我们检查是否设置了第 1 组,如果是,我们将 mcmac 大写,然后是其余部分。如果未设置 Group 1,则不处理该部分,仅将 Group 2 大写。

关于javascript - 将包含 ' , 的字符串更改为 TitleCase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33542035/

相关文章:

javascript - ReactJS 循环对象不返回值

javascript - 复选框值真/假

python - 如何使用 re.IGNORECASE 和 .sub 保留大小写?

java - 正则表达式捕获组在一个组中

javascript - 如何找到 Google 云端硬盘文件的整个父文件夹层次结构?

javascript - 资源解释为样式表但使用 MIME 类型文本/javascript 传输

javascript - 在第二个数组中排序单词

ruby - 在 Ruby 正则表达式中使用 ^ 字符向后看

php - 使用 PHP 如何找到 CSS 标签/id/类并替换大括号内的样式?

regex - 仅将文件的基本名称(不带扩展名的文件)与正则表达式匹配