手动实现replace方法

323 阅读1分钟

大概思路

要把方法放到String的prototype上,方法接收两个参数,一个是正则,一个是回调函数,每当正则匹配上就要调用这个回调函数,函数的返回值,会把匹配的部位替换,利用正则的exec方法每当执行一次正则的lastIndex就会后移,移到当前匹配的后一位,当匹配不上就会返回null

代码实现

 
 function myreplace(reg,callback){
            let regArr= reg.exec(this)      //返回的结果当前匹配的信息
            let length=regArr[0].length
            let emptyArr=[]
            for(let i=0;i<length-1;i++){
                emptyArr.push("")
            }
            let newArr=this.split("")
            while(regArr){
                let index=regArr["index"]
                let content=callback(...regArr)
                newArr.splice(index,length,content,...emptyArr)
                regArr= reg.exec(this)
            }
            return newArr.join("")
 }
 
String.prototype.myreplace = replace;