前言
正則的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;
}
複製程式碼