2011-09-22 63 views
1

我想做的事情在JavaScript中ucwords()對形式的字符串:test1_test2_test3和它應該返回Test1_Test2_Test3。正則表達式特殊ucwords

我已經發現SO的ucwords功能,但只佔用空間,新詞的分隔符。這裏是功能:

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

任何人都可以幫忙嗎?

回答

4

只是一個下劃線添加到可接受的斷字的列表:

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

正如你可以看到香港專業教育學院取代位這是\s+[\s_]+

活生生的例子:http://jsfiddle.net/Bs8ZG/

2

嘗試正則表達式

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

有關示例見here

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/

工作的罰款給我!