在java中,字符串可以使用replaceAll进行全局替换,类似于正则表达式中使用了/g的全部控制变量。但是js字符串(String)本身是不支持replaceAll方法的,只能使用简单的replace方法,如下所示:
1 var a = "xxxxx"; 2 alert(a.replace("x","a")); //返回 axxxx
很显然,用简单的replace只能替换第一个匹配项,这可能对某些需求不太方便。当然,也可以通过如下的方式,实现全局的替换:
1 var a = "xxxxx"; 2 alert(a.replace(/x/g,"a")); //返回 aaaaa
但是优秀的程序员人都是“懒惰”的,我们不想每次全局替换的时候都用正则的方式来实现,有没有一种一劳永逸的方法呢?答案是肯定的,只需要在代码中加入如下代码(摘自网络):
1 String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) { 2 if (!RegExp.prototype.isPrototypeOf(reallyDo)) { 3 return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi": "g")), replaceWith); 4 } else { 5 return this.replace(reallyDo, replaceWith); 6 } 7 }
这里为String添加了一个函数(相当与添加了native Code)replaceAll。
(String | RegExp)reallyDo代表被替换的字符串,(String)replaceWidth代表替换的字符串,(Boolean)ignoreCase为是否忽略大小写。
在之后的js代码中就可以直接使用replaceAll方法了。
1 var a = "xxxxx"; 2 alert(a.replaceAll("x","a")); //返回 aaaaa