我试图在 toCamelCase 函数中省略 _

I am trying to omit _ in toCamelCase function

我试图在字符串上使用 .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"))

即使第一个字母大写,我也有它,它仍然是大写,后面只有 运行s 驼峰式。

如果您能够 运行 代码片段,您将看到输出:

javaScriptExercises
javaScriptExercises
java_script_exercises //my issue is here

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

而不是 \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"))

空格和 - 不是单词字符,因此 \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"))

试试这个。由于 \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"))