我正在尝试创建一种方法,将带有小写字母和下划线的文本转换为没有下划线的文本,并且每个单词的首字母大写。
离;
options_page = Options Page
在此页面:How to make first character uppercase of all words in JavaScript?
我发现了这个正则表达式:
key = key.replace(/(?:_| |\b)(\w)/g, function(key, p1) { return p1.toUpperCase()});
除了用空格替换下划线之外,它会执行所有操作。我没有真正尝试过任何东西,因为我不熟悉regexpressions。
如何调整此正则表达式,以便用空格替换下划线?
答案 0 :(得分:22)
这应该可以解决问题:
function humanize(str) {
var frags = str.split('_');
for (i=0; i<frags.length; i++) {
frags[i] = frags[i].charAt(0).toUpperCase() + frags[i].slice(1);
}
return frags.join(' ');
}
humanize('humpdey_dumpdey');
// > Humpdey Dumpdey
<强> REPL 强>
<强>小提琴强>:
http://jsfiddle.net/marionebl/nf4NG/
<强> jsPerf 强>:
大多数测试数据:http://jsperf.com/string-transformations
所有版本加上_.str :http://jsperf.com/string-transformations/3
答案 1 :(得分:4)
这是两个不同的任务,因此两个不同的正则表达式是最佳解决方案:
key = key.replace(/_/g, ' ').replace(/(?: |\b)(\w)/g, function(key) { return key.toUpperCase()});
答案 2 :(得分:2)
下面:
var str = 'Lorem_ipsum_dolor_sit_amet,_consectetur____adipiscing_elit.'
str = str.replace(/_{1,}/g,' ').replace(/(\s{1,}|\b)(\w)/g, function(m, space, letter)
{
return space + letter.toUpperCase();
})
console.log(str);
答案 3 :(得分:1)
另一种选择:
'options_page'.replace(/(^|_)(\w)/g, function ($0, $1, $2) {
return ($1 && ' ') + $2.toUpperCase();
});
正则表达式:
(^|_) beginning of the input OR "_" ($1)
(\w) a word character (short for [a-zA-Z0-9_]) ($2)
g all occurences
有关正则表达式的更多信息:http://www.javascriptkit.com/javatutors/redev.shtml。
答案 4 :(得分:1)
从Lodash 3.1.0开始,有一种_.startCase([string=''])
方法可将任何大小写转换为大写单词(起始大小写):
_.startCase('hello_world'); // returns 'Hello World'
_.startCase('hello-world'); // returns 'Hello World'
_.startCase('hello world'); // returns 'Hello World'
Lodash的“字符串”部分中还有其他有用的方法。阅读文档here。
答案 5 :(得分:0)
只需添加。replace('_',' ')
像这样
function toCamel(string){
return string.replace(/(?:_| |\b)(\w)/g, function($1){return $1.toUpperCase().replace('_',' ');});
}