Я пытаюсь опустить _ в функции toCamelCase - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь использовать .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"))

У меня есть, даже если первая буква введена заглавной, она остается заглавной, и после нее запускается только верблюд.

Если вы можете запустить во фрагменте кода вы увидите вывод:

javaScriptExercises
javaScriptExercises
java_script_exercises //my issue is here

Я видел пару ошибок, говорящих о том, что chr.upperCase() не является функцией при попытке использовать разные версии /\W+(.)/g по всему проекту. Разве это не выполнимо с .replace()?

Ответы [ 2 ]

1 голос
/ 16 января 2020

Попробуйте это. Так как \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"))
0 голосов
/ 16 января 2020

Вместо \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 соответствует им. Логика c может быть легче следовать, если у вас есть белый список, символы которого необходимо заменить, например, используя набор символов [ _-]:

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"))
...