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");
提示
思路
这题很明显要使用字符串的 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; }