封裝一個函數能夠一次性把符合正則的全部內容都拿到

前言

正則的exec屬性去捕獲一個字符串時一次只能拿一個符合的,所以一樣的步驟須要作屢次,每次使用exec 或者test ,都會更新對應的lastIndex屬性(lastIndex屬性是自身內置的屬性)數組

execAll的實現思想

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

代碼實現

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;
}
複製代碼
相關文章
相關標籤/搜索