在js 中 replace 怎么不能替换中文?

JavaScript046

在js 中 replace 怎么不能替换中文?,第1张

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, 替换为replaceWord

function 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('中国', '美国')