0

我正在使用以下函数(第一个)来更改某些文本的大小写,这很棒。但我希望它考虑到连字符等后的字母。谁能帮我修改它以包含这个?我已经能够执行第二个功能,但是我确定您必须能够将其放入正则表达式中?

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

//don't want to do it like this;
function toProperCase(str)
{
    str = str.replace("-", "- ");
    str = str.replace("'", "' ");
    str = str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
    str = str.replace("- ", "-");
    str = str.replace("' ", "'");
    return str;
}
4

3 回答 3

0
function toProperCase(str) {
    return str.replace(/\b./g, 
           function(txt){return txt.toUpperCase()}
           )
    }

这会找到每个以单词边界开头的字符并将其替换为其大写版本。

单词边界是字符串开头和结尾的位置,以及单词字符和非单词字符之间的位置。单词字符是字母、数字或下划线,非单词字符是其他所有字符。

你对“连字符、撇号等”不是很具体,所以我猜它适用于任何不是字母、数字或下划线的东西。

请注意,您不必细分找到的字符串或添加小写字符串,因为replace仅替换匹配的字符:在这种情况下,它是单个字符。

于 2012-04-13T17:04:47.073 回答
0

也许这对你有用?

str.replace(/\w*/g, function(txt){
                       return txt.charAt(0).toUpperCase() + 
                              txt.substr(1).toLowerCase();
                   }
);
于 2012-04-13T16:36:18.923 回答
0

可能这对您的用例会更好:

str.replace(/\b[a-z][\w'-]*/ig, function(txt){
        return txt.charAt(0).toUpperCase() + 
               txt.substr(1).toLowerCase();
     }
);

这基本上是找到所有第一个字符是字母表并且后面是单词字符或连字符或 apos 的单词。

于 2012-04-13T16:41:37.080 回答