Search and Replace(fcc)

题目来自freecodecamp上面的一道练习题 在线调试
使用给定的参数对句子执行一次查找和替换,然后返回新句子。
第一个参数是将要对其执行查找和替换的句子。
第二个参数是将被替换掉的单词(替换前的单词)。
第三个参数用于替换第二个参数(替换后的单词)。
注意:替换时保持原单词的大小写。例如,如果你想用单词 "dog" 替换单词 "Book" ,你应该替换成 "Dog"。
如果你被难住了,记得使用 Read-Search-Ask尝试与他人结伴编程、编写你自己的代码。
这是一些对你有帮助的资源:
Array.splice()
String.replace()
Array.join()

String.prototype.replace()的语法:

str.replace(regexp|substr, newSubStr|function)

余下的问题在于如何替换时保持原单词的大小写。这个指的应当是单词的首字母

// 解法1
if(before[0] === before[0].toUpperCase()){
    // ...
}

// 解法2
var reg = /^[A-Z]/;
if(re.test(before.charAt(0))){
    // ...
}

这里顺便说一下访问单个字符时, str[index]charAt(index) 的区别:
对于 超出范围的索引值 , str[index] 将返回 undefined ,而 charAt(index) 将返回一个空字符串。
对于 IE8以下版本 , str[index] 不被兼容,将返回 undefined

解法

// 解法1
function myReplace(str,before,after){
  if(before[0] === before[0].toUpperCase()){
    after = after[0].toUpperCase() + after.slice(1);
  }
  str = str.replace(before,after);
  return str;
}

// 解法2
function myReplace(str,before,after){
  var reg = /^[A-Z]/;
  if(reg.text(before.charAt(0))){
    after = after.charAt(0).toUpperCase() + after.slice(1);
  }
  str = str.replace(before,after);
  return str;
}

推荐阅读更多精彩内容