JavaScript模拟实现replaceAll方法

2018-5-21 23:59| 作者: admin| 查看: 643| 评论: 0|来自: 蚂蚁部落

本文介绍一下JavaScript模拟实现replaceAll功能,也就是将字符串中的所有指定内容替换掉,首先看一段代码实例:

[JavaScript] 纯文本查看 复制代码运行代码
var str="蚂蚁部落欢迎您,希望大家在蚂蚁部落能够获得想要的东西";
console.log(str.replace("蚂蚁部落","本站"));

上面代码只能替换字符串中的第一个"蚂蚁部落",代码修改如下:

[JavaScript] 纯文本查看 复制代码运行代码
var str="蚂蚁部落欢迎您,希望大家在蚂蚁部落能够获得想要的东西";
console.log(str.replace(/蚂蚁部落/g,"本站"));

采用全局匹配可以替换掉原字符串中的所有指定内容。

代码封装如下:

[JavaScript] 纯文本查看 复制代码运行代码
var str="蚂蚁部落欢迎您,希望大家在蚂蚁部落能够获得想要的东西";
String.prototype.replaceAll=function(reallyDo,replaceWith,ignoreCase){  
  if(!RegExp.prototype.isPrototypeOf(reallyDo)){  
    return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi": "g")), replaceWith);  
  } 
  else{  
    return this.replace(reallyDo, replaceWith);  
  }  
}
console.log(str.replaceAll("蚂蚁部落","本站",true));

上面的代码实现了我们的要求,下面介绍一下它的实现过程。

代码注释:

(1).var str="蚂蚁部落欢迎您,希望大家在蚂蚁部落能够获得想要的东西",要进行替换的字符串。

(2).String.prototype.replaceAll=function(reallyDo,replaceWith,ignoreCase){},在String原型对象上添加一个方法,第一个参数可以是要被替换的字符串或者是一个匹配要被替换字符串的正则表达式,第二个参数规定使用哪些字符串进行替换,第三个参数是一个布尔值,用来规定是否忽略字符大小写,如果是true则忽略,否则不忽略。

(3).if(!RegExp.prototype.isPrototypeOf(reallyDo)),判断RegExp.prototype是否在参数reallyDo的原型链中,如果在的话,说明reallyDo是一个正则表达式 ,这段代码判断第一个参数是否是一个正则表达式。

(4).return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi": "g")), replaceWith),如果不是正则表达式,将replace方法参数第一个参数创建一个正则表达式对象,并且根据ignoreCase参数来决定是否忽略大小写。

(5).else{return this.replace(reallyDo, replaceWith);},如果是一个正则表达式对象,那就直接使用就可以了。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部