将短划线字符串转换为camelCase?

Hoa*_*Hoa 40 javascript regex

例如,假设我总是有一个由" - "分隔的字符串.有没有办法改造

它 - 是 - 一个伟大-日常

itIsAGreatDayToday

使用RegEx?

aps*_*ers 74

(已编辑以支持非小写输入和Unicode):

function camelCase(input) { 
    return input.toLowerCase().replace(/-(.)/g, function(match, group1) {
        return group1.toUpperCase();
    });
}
Run Code Online (Sandbox Code Playgroud)

在MDN的"将函数指定为参数"文档中查看有关"替换回调"的更多信息.

回调函数的第一个参数是完全匹配,后续参数是正则表达式中的括号组(在本例中是连字符后面的字符).

  • @pst肯定会的.虽然它在`politische-ökonomie`上失败,因为`\ w`不支持Unicode.Javascript RegExp似乎也不支持`\ p {Letter}`或`\ p {Letter&}`,所以如果你想让它正常工作你应该考虑使用`/-(.)/ g`作为正则表达式. (2认同)

Lio*_*rez 8

另一种使用reduce的方法:

function camelCase(str) {
  return str
    .split('-')
    .reduce((a, b) => a + b.charAt(0).toUpperCase() + b.slice(1));
}
Run Code Online (Sandbox Code Playgroud)


mae*_*ics 5

您可以在每个破折号(-)或字符串的开头之后匹配单词字符,或者您可以通过匹配每个单词边界(\b)后面的单词字符来简化:

function camelCase(s) {
  return (s||'').toLowerCase().replace(/(\b|-)\w/g, function(m) {
    return m.toUpperCase().replace(/-/,'');
  });
}
camelCase('foo-bar'); // => 'FooBar'
camelCase('FOo-BaR-gAH'); // => 'FooBarGah'
Run Code Online (Sandbox Code Playgroud)