toTitleCase javascript边缘情况

时间:2015-09-17 17:51:35

标签: javascript regex

情境:

我有一个典型的 toTitleCase() JavaScript函数w / RegEx,我用于单个文本字段,用于人名和姓氏。

function toTitleCase(str) {
     return str.replace(/\w\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });
}

问题

如上所示 - 在这种情况下,我使用此函数作为名字和姓氏。因此 - 个人姓名可能有多个大写字母。例如:James O'Mally或Robert McNally。不幸的是,上面的JavaScript函数将返回James O'mally或Robert Mcnally。

我希望一些很棒的Stackoverflow贡献者可以提供一个RegEx解决方案,该解决方案会考虑这个边缘情况,并在字符串中间保留一个现有的大写值。

感谢您的时间和考虑

2 个答案:

答案 0 :(得分:0)

也许mutating正是您所寻找的。它会在单词边界之后的任何字母(a-z)大写。

/\b[a-z]/g

答案 1 :(得分:0)

@nhahtdh - 听起来你可能是正确的,这个问题要广泛回答。也许我会放弃RegEx并编写一个考虑这种模式的自定义格式化程序。感谢大家的帮助