codetc - 网站开发技术 首页 前端 查看内容

JS使用RegExp对象实现replaceall全局匹配并替换

2015-1-24 00:29| 发布者: CODETC| 查看: 8295| 评论: 0

javascript中替换字符串的方法是replace函数,但在网站开发的过程中使用时却发现该函数只会替换第一个被匹配的字符,而不能像PHP的replace一样实现全局匹配并替换。


例:
<script type="text/javascript">
var str = 'php! I love php';
str = str.replace('php', 'codetc');
alert(str);
</script>

上例输出的结果为: codetc! I love php
可以看到,replace函数只替换了第一个php,而后面的却没有被替换,这样的结果很多时候并不是我们想要的;那么我们如果实现replaceall全局匹配并替换呢?


其实 replace 本身也可以实现这种功能的,但需要通过借助 RegExp 对象实现。

RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。

创建 RegExp 对象的语法:
new RegExp(pattern, attributes);

参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。


这里我们只需要全局匹配替换指定的字符串的话,大可不必用到正则表达式,pattern的值直接指定目标字符串就行,但如果要实现正则匹配,那则需要把pattern指定为正则匹配规则,关于正则表达式的基本语法可以参考php正则表达式以及正则函数的使用


使用RegExp后,上面的例子可以变成:
<script type="text/javascript">
var str = 'php! I love php';
str = str.replace(new RegExp('php','g'), 'codetc');
//str = str.replace(/php/g, 'codetc'); //效果相同
alert(str);
</script>
输出的结果为:codetc! I love codetc
这个结果已经达到我们的目标了,相当简单是吧,为了使用更方便,我们可以自己扩展js函数库,自创函数replaceall方法实现全局匹配并替换的功能。

String.prototype.replaceall=function(s1,s2){
    return this.replace(new RegExp(s1,"gm"),s2);
}
最后,我们可以直接使用 str.replaceall('php', 'codetc')就可以了
文章来源 CODETC,欢迎分享,转载请注明地址: http://www.codetc.com/article-127-1.html

最新评论

 作为游客发表评论,请输入您的昵称

返回顶部