toProperCase Javascript Regex - 包括hypen等

时间:2012-04-13 16:04:50

标签: javascript regex

我正在使用下面的函数(第一个)来改变一些文本的大小写,这很棒。但是我希望它能够考虑到大肆宣传之后的信件等。任何人都可以帮我修改它以包含这个吗?我已经能够做第二个功能,但我相信你一定能把它放在正则表达式中吗?

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;
}

3 个答案:

答案 0 :(得分:0)

也许这适合你?

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

答案 1 :(得分:0)

可能这对您的用例更有效:

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

这基本上是找到所有单词,其中第一个字符是字母表,后面是单词字符或连字符或者否。

答案 2 :(得分:0)

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

这将找到每个以字边界开头的字符,并将其替换为大写字母。

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

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

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