【问题标题】:I am trying to omit _ in toCamelCase function我试图在 toCamelCase 函数中省略 _
【发布时间】:2020-01-16 05:58:00
【问题描述】:

我试图在字符串上使用.replace() 来省略下划线和驼峰式大小写,无论字符串通过函数传递。我能够省略“”和“-”,但正在努力使用 \W/ 省略“_”。

我写的一小段代码是:

function toCamelCase(str) {
  return str.replace(/\W+(.)/g, function(match, chr) {
    return chr.toUpperCase();
  });
}

console.log(toCamelCase("javaScript Exercises"));
console.log(toCamelCase("java-script-exercises"));
console.log(toCamelCase("java_script_exercises"))

即使第一个字母输入大写,它仍然是大写,并且仅在后面运行驼峰式。

如果您能够运行代码 sn-p,您将看到输出:

javaScriptExercises
javaScriptExercises
java_script_exercises //my issue is here

我看到几个错误说chr.upperCase() 不是在整个项目中尝试不同版本的/\W+(.)/g 的函数。这对.replace() 不可行吗?

【问题讨论】:

    标签: javascript string camelcasing


    【解决方案1】:

    试试这个。由于\W 在列表中包含_,它不会替换_

    \W is same as [^a-zA-Z0-9_]

    function toCamelCase(str){
        return str.replace(/[^a-zA-Z0-9]+(.)/g, function(match, chr) {
          return chr.toUpperCase();
        });
      }
      console.log(toCamelCase("javaScript Exercises"));
      console.log(toCamelCase("java-script-exercises"));
      console.log(toCamelCase("java_script_exercises"))

    【讨论】:

      【解决方案2】:

      使用[\W_]+ 代替\W+ - 下划线是单词字符,因此[\W_] 将匹配任何非单词字符下划线,并删除它们:

      function toCamelCase(str){
        return str.replace(/[\W_]+(.)/g, function(match, chr) {
          return chr.toUpperCase();
        });
      }
      
      console.log(toCamelCase("javaScript Exercises"));
      console.log(toCamelCase("java-script-exercises"));
      console.log(toCamelCase("java_script_exercises"))

      空格和-s 不是单词字符,所以\W 匹配它们。如果您有需要替换哪些字符的白名单,则逻辑可能更容易遵循 - 例如,使用[ _-]的字符集:

      function toCamelCase(str){
        return str.replace(/[ _-]+(.)/g, function(match, chr) {
          return chr.toUpperCase();
        });
      }
      
      console.log(toCamelCase("javaScript Exercises"));
      console.log(toCamelCase("java-script-exercises"));
      console.log(toCamelCase("java_script_exercises"))

      【讨论】:

        猜你喜欢
        • 2016-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多