真正无错的javascript的replaceAll函数

网络上的文章,总复制来复制去复制来复制去复制来复制去……千篇一律,怎么找都是那些资料;只要其中一个资料有问题,就全部资料有问题。问题解决方案呢?没有,郁闷去吧。

 

javascript的replace函数,直接使用的时候,只会替换第一个符合要求的字符,比如:

var a = "天青色烟雨,而我在你".replace("等","想");

替换后,a的值为"天青色烟雨,而我在你",第二个以上符合要求的字符串全部没换,只替换了第一个。

我们最最常需要用到的是:一次性替换所有符合要求的字符串。

 

要达到这样的要求,需要配合正则表达式来处理:

var a = "天青色烟雨,而我在你".replace(new RegExp("等","gm"),"想");

替换后,a的值为"天青色烟雨,而我在你"。

已经可以正常替换了。

 

于是,网络上的高手们,把它写成函数:

String.prototype.replaceAll = function(s1,s2){   
return this.replace(new RegExp(s1,"gm"),s2);   
}

把这一段放在js代码的最前面去,在后面的任何js代码里,可以直接使用:

var a = "天青色烟雨,而我在你".replaceAll("等","想");

 

网络上把这个函数复制烂了,随便找都是这个函数。

 

---------传说中朴素的分割线--------------

 

有人想要使用函数的形式,说搜不到,改写一下:

function replaceAll(s1,s2,s3){   
return s1.replace(new RegExp(s2,"gm"),s3);   
}

使用方式:var a = replaceAll("天青色烟雨,而我在你","等","想");

 

---------传说中朴素的分割线--------------

 

String.prototype.replaceAll = function(s1,s2){   
return this.replace(new RegExp(s1,"gm"),s2);   
}

这个函数,明眼一看就知道并不完善。普通的文字替换没有问题,一旦含特殊字符,与正则表达式里所使用的特殊字符相冲突时,必然出错。

比如:

var a = "你有$100.99吗?".replaceAll("$","¥");

与预期的效果不一致。

可是互联网上就是把这么一个烂函数复制来复制去复制来复制去复制来复制去……

 

正确无错的函数:

function replaceAll(s1,s2,s3){
var r = new RegExp(s2.replace(/([\(\)\[\]\{\}\^\$\+\-\*\?\.\"\'\|\/\\])/g,"\\$1"),"ig");
return s1.replace(r,s3);
}

使用方法:var a = replaceAll("你有$100.99吗?","$","¥");

 

也可以:

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

var r = new RegExp(s1.replace(/([\(\)\[\]\{\}\^\$\+\-\*\?\.\"\'\|\/\\])/g,"\\$1"),"ig");
return this.replace(r,s2);
}

使用方法:var a = "你有$100.99吗?".replaceAll("$","¥");

 

要转就转上面这个函数,免得误人子弟。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值