封裝一個函式可以一次性把符合正則的所有內容都拿到

polikesen發表於2019-09-28

前言

正則的exec屬性去捕獲一個字串時一次只能拿一個符合的,因此同樣的步驟需要做多次,每次使用exec 或者test ,都會更新對應的lastIndex屬性(lastIndex屬性是自身內建的屬性)

execAll的實現思想

一直用exec捕獲 啥時候結果是null 啥時候就停止捕獲,先用一個變數接收 exec的結果 ,當這個結果存在 就是把這結果放到一個陣列中,當結果不存在時 返回 這個陣列;

程式碼實現

RegExp.prototype.execAll = function(str){
    var that = this;//函式中的this不能直接參與運算,用一個變數代替
    if(!that.global){
        //that = eval(that + 'g');
        var temp = /^\/(.+)\/$/.exec(that+'')[1];
        that = new RegExp(temp,'g');
    }
    var res = that.exec(str);
    var ary = [];
    while(res){
        ary.push(res);
        res = that.exec(str);
    }
    return ary;
}
複製程式碼

相關文章