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

Lee*_*iss 15 javascript regex

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

前;

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

小提琴:

http://jsfiddle.net/marionebl/nf4NG/

jsPerf:

大多数测试数据:http://jsperf.com/string-transformations

所有版本加上_.str:http://jsperf.com/string-transformations/3

  • 即时可读/可理解的代码,并且比正则表达式更快。谁会想到这可能呢? (2认同)

Ari*_*sta 9

从 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 部分还有其他有用的方法。阅读此处的文档。

  • 旁注:如果您只想在 React 中导入这一个函数而不是整个库,则可以在文件顶部使用 import startCase from 'lodash/startCase' 而不是导入整个库(如果您仅将其用于此目的)一件事。 (2认同)

Hub*_* OG 6

这是两个不同的任务,因此两个不同的正则表达式是最佳解决方案:

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)