特殊ucwords的正则表达式

时间:2011-09-22 11:02:51

标签: javascript regex

我想在JavaScript中对{1}形式的字符串执行ucwords(),它应该返回Test1_Test2_Test3。

我已经在SO上找到了ucwords函数,但它只需要空格作为新的单词分隔符。这是功能:

function ucwords(str) {
return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
    return $1.toUpperCase();
});

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

只需在可接受的分词符列表中添加下划线:

function ucwords(str) {
return (str + '').replace(/^([a-z])|[\s_]+([a-z])/g, function ($1) {
    return $1.toUpperCase();
})
};

正如您所见,我将\s+的位替换为[\s_]+

实例:http://jsfiddle.net/Bs8ZG/

答案 1 :(得分:2)

尝试使用正则表达式

/(?:\b|_)([a-z])/

有关示例,请参阅here

答案 2 :(得分:0)

其他两个似乎相当完整的解决方案:

String.prototype.ucwords = function() {
    str = this.toLowerCase();
    return str.replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g,
        function($1){
            return $1.toUpperCase();
        });
}
$('#someDIV').ucwords();

来源:http://blog.justin.kelly.org.au/ucwords-javascript/

function ucwords (str) {
  return (str + '').replace(/^([a-z\u00E0-\u00FC])|\s+([a-z\u00E0-\u00FC])/g, function ($1) {
    return $1.toUpperCase();
  });
}

ucwords('kevin van  zonneveld');

来源:http://phpjs.org/functions/ucwords/

对我很好!