我在freeCodeCamp中做一个算法。(https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/search-and-replace

任务如下:

执行搜索并使用提供的参数替换句子,然后返回新句子。
第一个参数是执行搜索和替换的句子。
第二个参数是您要替换的单词(之前)。
第三个参数是您将用(之后)替换第二个参数的内容。

注意:
替换原始单词时,保留第一个字符的大小写。例如,如果您打算将单词“ Book”替换为“ dog”,则应将其替换为“ Dog”

**
myReplace(“让我们回到更多的编码”,“ Coding”,“算法”)应该返回“让我们回到更多的算法”。
myReplace(“让我们去商店”,“商店”,“购物中心”)应该返回“让我们去商店”。

**

  //if the before is uppercase, the after should be uppercase also
  // str = str.replace(before, after);
  var regex = /[A-Z]+/g; //check for uppercase
  var newStr = "";
  console.log(regex.test(before));
  if (regex.test(before)) {
    //if uppercase, return true, "after" convert to uppercase
    after = after.toUpperCase();
    newStr = after[0];
    for (var i = 1; i < after.length; i++) {
      //start at index=1 letter, all convert to
      newStr += after[i].toLowerCase();
    }
    console.log(newStr);
    str = str.replace(before, newStr);
  } else {
    str = str.replace(before, after);
  }
  // console.log(newStr);
  console.log(str);
  return str;
}


我认为代码应该可以,但是任何人都可以帮助您找到为什么if语句无法正常工作的原因。
非常感谢!

最佳答案

当您真的只需要检查第一个字符时,使用正则表达式似乎有点过头。您的正则表达式可以在任何地方找到大写字母...

如果只分配一次更改,那么正则表达式在这里并不是真正的正确工具:它实际上并没有帮助提高代码或效率。做就是了:

function myReplace(str, before, after) {
    if (before[0] === before[0].toUpperCase()) {
        after = after[0].toUpperCase() + after.slice(1);
    } else {
        after = after[0].toLowerCase() + after.slice(1);
    }

    return str.replace(before, after);
}

关于javascript - 算法-搜索和替换字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60333221/

10-14 14:52
查看更多