我在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/