JavaScript模擬實現replaceAll方法

admin發表於2018-05-21

本文介紹一下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);},如果是一個正規表示式物件,那就直接使用就可以了。

相關文章