Search and Replace

使用给定的参数对句子执行一次查找和替换,然后返回新句子。

第一个参数是将要对其执行查找和替换的句子。

第二个参数是将被替换掉的单词(替换前的单词)。

第三个参数用于替换第二个参数(替换后的单词)。

注意:替换时保持原单词的大小写。例如,如果你想用单词 "dog" 替换单词 "Book" ,你应该替换成 "Dog"。

 

//判断字符串str中首字符是否大写
function isFirstUpper(str){
  if(str.charAt(0)==str.charAt(0).toUpperCase())
    return true;
  else
    return false;
}
//将字符串str中首字符替换成大写形式
function firstToUpper(str){
  return str.replace(str.charAt(0),str.charAt(0).toUpperCase());
}
function myReplace(str, before, after) {  
  //如果即将被替换的单词before中首字符为大写形式
  //则将替换before的单词after首字符替换成大写形式
  if(isFirstUpper(before)){
    after=firstToUpper(after);
  }
  //将str中目标单词before用after替换
  str=str.replace(before,after);
  return str;
}

myReplace("A quick brown fox Jumped over the lazy dog", "Jumped", "leaped");

提示

Array.splice()

String.replace()

Array.join()

思路

这题很明显要使用字符串的 replace() 方法。

String.prototype.replace() 语法:

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

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

解法一

索引方式访问字符串。JavaScript中可以用索引方式访问单个字符,就像访问数组中的某一项一样。

if(before[0] === before[0].toUpperCase()){
    //do something...
  }

解法二

用正则表达式匹配;用 charAt() 访问单个字符。

使用正则表达式的好处在于,即使未来替换规则改变,代码修改量也不会很大。

var re = /^[A-Z]/;
if(re.test(before.charAt(0))){
    //do something...
  }

这里顺便说一下访问单个字符时, str[index] 和 charAt(index) 的区别:

对于 超出范围的索引值 , str[index] 将返回 undefined ,而 charAt(index) 将返回一个空字符串。

对于 IE8以下版本 , str[index] 不被兼容,将返回 undefined。

 

解法

解法一

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;
}
解法二

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

 

posted @ 2016-11-29 10:35  兴趣使然的椰子  阅读(1435)  评论(0编辑  收藏  举报