使用正则表达式replace()方法删除分隔符并一步大写首字母

时间:2016-06-25 09:09:15

标签: javascript regex string replace regex-lookarounds

在尝试删除所有下划线分隔符并将第一个字母转换为大写字母时,我已经开发了以下函数(在此codepen中也可用:http://codepen.io/PiotrBerebecki/pen/RRKjex)。

目的:

'this_is_some_text'作为输入字符串,该函数应返回'ThisIsSomeText'

使用JS代码:

function capitaliseFirst(str) {
  var firstCapital = str.replace(/[a-z]+/g, x => x[0].toUpperCase() + x.slice(1));
  return firstCapital.replace(/_/g, '')
}

console.log( capitaliseFirst('this_is_some_text') ); // returns ThisIsSomeText

上面的函数达到了预期的目标,但是我想重构它以便只需要一个replace()方法。目前我仍然坚持下面的代码。你知道怎么做到这一点吗?

不工作(尚未)JS代码:

function capitaliseFirst2(str) {
  return str.replace(/(?:_)?([a-z])/g, '$1')
}

console.log( capitaliseFirst2('some_other_text') ); // should return SomeOtherText

3 个答案:

答案 0 :(得分:2)

以这种方式:

function capitaliseFirst2(str) {
    return str.replace(/(?:_+|^)(.)/g, (m0, m1) => m1.toUpperCase());
}

我们匹配并大写每个下划线或字符串开头后的每个字符。

答案 1 :(得分:1)

我建议您只使用正则表达式代替使用正则表达式:

function capitaliseFirst2(str) {
  return str.split('_').map(function(w) {
    return w.charAt(0).toUpperCase() + w.slice(1);
  }).reduce(function(a, b) {
    return (a + b)
  });
}

与正则表达式相比,我不确定性能问题,但它比正则表达式更具可读性。

答案 2 :(得分:1)

使用ES6箭头函数的另一个简短解决方案Array.forEach函数:

var str = 'this_is_some_text', capitalized = "";
    str.split("_").forEach((s) => (capitalized += s[0].toUpperCase() + s.slice(1)));

console.log(capitalized);  // "ThisIsSomeText"