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

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

例:

var str = 'php! I love php';

str = str.replace('php', 'codetc');

alert(str);

上例输出的结果为: 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后,上面的例子可以变成:

var str = 'php! I love php';

str = str.replace(new RegExp('php','g'), 'codetc');

//str = str.replace(/php/g, 'codetc'); //效果相同

alert(str);

输出的结果为:codetc! I love codetc

这个结果已经达到我们的目标了,相当简单是吧,为了使用更方便,我们可以自己扩展js函数库,自创函数replaceall方法实现全局匹配并替换的功能。

String.prototype.replaceall=function(s1,s2){

return this.replace(new RegExp(s1,"gm"),s2);

}

最后,我们可以直接使用 str.replaceall('php', 'codetc')就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值