js提供的字符串替换函数replace可以将字符串中符合条件的字符串替换成目标字符串。但是一般使用字符串进行查找替换只能替换第一个符合条件的结果。如:
var str=大家都是男人吗,难道不是吗!
str=str.replace('吗','嘛')
alert(str)
var str=大家都是男人吗,难道不是吗!str=str.replace('吗','嘛')alert(str)
上述代码中只有第一个吗被替换,输出结果是大家都是男人嘛,难道不是吗!,嘿嘿!
如果想全部替换字符串中全部符合条件的内容,用正则表达式替换是个不错的办法,如下代码可以实现全部替换。
var str='大家都是男人吗,难道不是吗?'
str=str.replace(/吗/g,'嘛')
alert(str)
var str='大家都是男人吗,难道不是吗?'str=str.replace(/吗/g,'嘛')alert(str)
这样就会输出大家都是男人嘛,难道不是嘛?,全部符合条件的内容都被替换了,特别要注意的是正则表达式/吗/g这里的g,这个g表示全局,不给这个配置项是不会全部替换的。
当然通过复杂的正则表达式,js的replace还能实现更丰富的字符串替换处理效果的。
JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符.而str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志)。
replace()
The replace() method returns the string that results when you replace text matching its first argument
(a regular expression) with the text of the second argument (a string).
If the g (global) flag is not set in the regular expression declaration, this method replaces only the first
occurrence of the pattern. For example,
var s = "Hello. Regexps are fun." s = s.replace(/\./, "!" )// replace first period with an exclamation pointalert(s)
produces the string “Hello! Regexps are fun.” Including the g flag will cause the interpreter to
perform a global replace, finding and replacing every matching substring. For example,
var s = "Hello. Regexps are fun." s = s.replace(/\./g, "!" )// replace all periods with exclamation pointsalert(s)
yields this result: “Hello! Regexps are fun!”
所以可以用以下几种方式.:
string.replace(/reallyDo/g, replaceWith)
string.replace(new RegExp(reallyDo, 'g'), replaceWith)
string:字符串表达式包含要替代的子字符串。
reallyDo:被搜索的子字符串。
replaceWith:用于替换的子字符串。
Js代码
<script type="text/javascript">
String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) {
if (!RegExp.prototype.isPrototypeOf(reallyDo)) {
return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi": "g")), replaceWith)
} else {
return this.replace(reallyDo, replaceWith)
}
}
</script>
我写了代码如下, 测试可行, 供参考:
//主要靠这个函数实现: 将body下的文本节点中的searchWord, 替换为replaceWordfunction replaceBodyText(searchWord, replaceWord){
var reg = new RegExp(searchWord, 'g')
function replaceNode(node){
node.childNodes.forEach(function(v){
if(v.nodeName === 'SCRIPT')
return //排除<script>标签
if(!v.hasChildNodes()){
if(reg.test(v.textContent))
v.textContent = v.textContent.replace(reg, replaceWord)
return
}
replaceNode(v)
})
}
replaceNode(document.body)
}
//绑定一个事件测试用, 点击这个按钮后才会执行
document.querySelector('#testBtn').addEventListener('click', function(){
replaceBodyText('中国', '美国')
})
//实际使用中直接调用函数即可:
//以下语句表示将所有文本节点中的"中国"替换为"美国:
//replaceBodyText('中国', '美国')