代码之家  ›  专栏  ›  技术社区  ›  Piotr Berebecki

使用regex replace()方法一步删除分隔符并大写首字母

  •  1
  • Piotr Berebecki  · 技术社区  · 9 年前

    我开发了以下功能(也可以在这个代码笔中使用: 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 回复  |  直到 9 年前
        1
  •  2
  •   melpomene    9 年前

    这里有一种方法:

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

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

        2
  •  1
  •   Mario Santini Imran Kedim    9 年前

    我建议您不要使用regexp,而只编写代码:

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

    与regexp相比,我不确定性能问题,但它比regexp可读性更强。

        3
  •  1
  •   RomanPerekhrest    9 年前

    另一个使用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"