【问题标题】:space between camelCase string, why does my code not work?camelCase 字符串之间的空格,为什么我的代码不起作用?
【发布时间】:2021-06-23 09:40:58
【问题描述】:

在 JavaScript 中:

function solution(string) {
    
  let stringCharArr = string.split("");
  
  if(stringCharArr.every(char => char === char.toLowerCase())){
    return string;
  } 
  
  for(let stringChar of stringCharArr){
    let indexOfChar = stringCharArr.indexOf(stringChar)
    if(stringChar === stringChar.toUpperCase() && stringChar !== ' '){
      stringCharArr.splice(indexOfChar, 0, ' ')
    }
  }
  
  let replaceRegex = /,/g
  let newString = stringCharArr.join().replace(replaceRegex, '');
  
  return newString;
}

我的函数的目标是用驼峰式字母前的空格替换驼峰式字符串。我无法弄清楚为什么我的功能不起作用。这是对代码战的挑战。

【问题讨论】:

  • 是什么让您认为它不起作用?输入、当前输出和预期输出是多少? FWIW,您可以将 let newString = stringCharArr.join().replace(replaceRegex, ''); 替换为 let newString = stringCharArr.join('')
  • 你的 indexOfChar 看起来很可疑,肯定会遇到任何重复的字符吗?
  • 为什么不/([a-z])([A-Z])/\1 \2/g
  • @DBS 啊,这可能是个问题。我会尝试使用普通的 for 循环,我认为是 stringCharArr[i]。

标签: javascript regex string


【解决方案1】:

寻找这样的东西?

function solution(string) {
  let newString = '';
  for (let char of  string) {
    if (char === char.toUpperCase() && char !== ' ')
      newString += " " + char;
    else newString += char
  }
  return newString.toLowerCase().replace(/^\ */g, '');
}


console.log(solution("ThisIsATest"));
console.log(solution("ThisIsATEST"));
console.log(solution("this is all lowercase"));

或者使用正则表达式:

const fromCamelCaseToSeparated = (str) => str.replace(/([A-Z])/g, ' $1') .replace(/^./, function(str){ return str.toUpperCase(); })


console.log(fromCamelCaseToSeparated("ThisIsATest"));
console.log(fromCamelCaseToSeparated("this is a test"));
console.log(fromCamelCaseToSeparated("AnotherTEST"));

【讨论】:

    【解决方案2】:

    这一切看起来都过于复杂。这是一个单行:

    const addSpaces = inputString => inputString.split("")
      .map(c => /[A-Z]/.test(c) ? ` ${c}` : c).join("");
    console.log(addSpaces("ThisCamelcasedStringShouldContainSpacesBeforeUppercaseCharacters"));

    【讨论】:

      【解决方案3】:

      如果您的唯一目标是返回一个在每个单词之间包含空格的新字符串,那么这是一种非常简单的方法。

      function solution(str) {
          let newStr = ''
          for (const i in str) {
              if (str[i].match('[A-Z]')) {
                  newStr += ' ' + str[i].toLowerCase()
              } else {
                  newStr += str[i]
              }
          }
          return newStr
      }
      
      console.log(solution('helloAndWelcome'))
      // hello and welcome

      【讨论】:

        【解决方案4】:

        您在该循环中迭代 stringCharArr 并更新 stringCharArr。你可以改用replace()

        "camelCaseString".replace(/[A-Z]/g, " $&")
        

        console.log("camelCaseString".replace(/[A-Z]/g, " $&"))

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-30
          • 2014-01-23
          • 2013-08-06
          相关资源
          最近更新 更多