返回标题案例在单词中间尊重大写字母?

时间:2014-12-12 20:56:30

标签: javascript

不确定这是否重复(不确定我是如何通过搜索来确定搜索结果的,因为我的google-fu今天很弱)

我有一些javascript代码可以将每个单词的第一个字母转换为大写。我需要改变它,以便它尊重你可能会在姓氏中看到的奇怪的大写(例如:McGuire,MacGonnacle,O' Brien)。
基本上,我们的想法是强制每个单词的首字母大写,但如果输入大写,则不会将所有其他字母转换为小写。

以下是代码段:

function properCase(str) {
    str = str.toLowerCase();
    return str.replace(/(\b)([a-z\WA-Z\W])/g,
             function (firstLetter) {
                 return firstLetter.toUpperCase();
             });
}

这可能是因为它是周末结束的,但我需要做些什么修改?

1 个答案:

答案 0 :(得分:2)

你有大部分内容,只需删除str.toLowerCase();

function properCase(str) {
  return str.replace(/(\b)([a-z\WA-Z\W])/g,function (firstLetter) {
    return firstLetter.toUpperCase();
  });
}

正在运行properCase('mcCormick')会返回McCormick

编辑:

看看正则表达式,我认为你可能不需要整个表达式(尽管这取决于你的用例,就像所有事情一样)

function properCase(str) {
  return str.replace(/(?:^|\s)([a-z])/,function (firstLetter) {
    return firstLetter.toUpperCase();
  });
}

这将以字母开头的任何单词的开头大写。 Ex properCase('mcCormick is *an excellent duelist')会返回"McCormick Is *an Excellent Duelist"