用空格替换下划线并大写单词

时间:2014-02-15 01:40:48

标签: javascript regex

我正在尝试创建一种方法,将带有小写字母和下划线的文本转换为没有下划线的文本,并且每个单词的首字母大写。

离;

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。

如何调整此正则表达式,以便用空格替换下划线?

6 个答案:

答案 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://repl.it/OnE

<强>小提琴

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('_',' ');});
}