网络上的文章,总复制来复制去复制来复制去复制来复制去……千篇一律,怎么找都是那些资料;只要其中一个资料有问题,就全部资料有问题。问题解决方案呢?没有,郁闷去吧。
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("$","¥");
要转就转上面这个函数,免得误人子弟。