我正在尝试创建一种方法,将带有小写字母和下划线的文本转换为没有下划线的文本,并且每个单词的首字母大写.
前;
options_page = Options Page
Run Code Online (Sandbox Code Playgroud)
在这个页面:如何使JavaScript中所有单词的第一个字符大写?
我发现这个正则表达式:
key = key.replace(/(?:_| |\b)(\w)/g, function(key, p1) { return p1.toUpperCase()});
Run Code Online (Sandbox Code Playgroud)
这样做除了用空格替换下划线之外的所有事情.我没有真正尝试任何东西,因为我对regexpressions并不熟悉.
如何调整此正则表达式,以便用空格替换下划线?
mar*_*ebl 24
这应该做的伎俩:
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
Run Code Online (Sandbox Code Playgroud)
REPL
小提琴:
http://jsfiddle.net/marionebl/nf4NG/
jsPerf:
大多数测试数据:http://jsperf.com/string-transformations
所有版本加上_.str:http://jsperf.com/string-transformations/3
从 Lodash 3.1.0 开始,有一种_.startCase([string=''])方法可以将任何大小写转换为大写单词(起始大小写):
_.startCase('hello_world'); // returns 'Hello World'
_.startCase('hello-world'); // returns 'Hello World'
_.startCase('hello world'); // returns 'Hello World'
Run Code Online (Sandbox Code Playgroud)
Lodash 的 String 部分还有其他有用的方法。阅读此处的文档。
这是两个不同的任务,因此两个不同的正则表达式是最佳解决方案:
key = key.replace(/_/g, ' ').replace(/(?: |\b)(\w)/g, function(key) { return key.toUpperCase()});
Run Code Online (Sandbox Code Playgroud)
为了确保甚至处理所有大写单词。您可以.toLowerCase()在最前面添加.replace:
key = key.replace(/_/g, ' ').replace(/(?: |\b)(\w)/g, function(key) { return key.toUpperCase()});
Run Code Online (Sandbox Code Playgroud)