RegExp exec有記憶性的問題

   

    當 RegExpObject 是做爲一個變量時時。每次調用完exec()後。它會在 RegExpObject 的 lastIndex 屬性指定的字符處開始檢索字符串 string。當 exec() 找到了與表達式相匹配的文本時,在匹配後,它將把 RegExpObject 的 lastIndex 屬性設置爲匹配文本的最後一個字符的下一個位置。這就是說,您能夠經過反覆調用 exec() 方法來遍歷字符串中的全部匹配文本。當 exec() 再也找不到匹配的文本時,它將返回 null,並把 lastIndex 屬性重置爲 0。正則表達式

    重要事項:若是一個RegExpObject變量,在一個字符串中完成了一次模式匹配以後要開始檢索新的字符串,就必須手動地把 lastIndex 屬性重置爲 0。this

    而實際咱們應用中常用同一個RegExpObject對象,避免每次匹配從新解析表達式,應該會提高一些效率。spa

    因此最好是在使用正則表達式前實現以下新的匹配方法。prototype

// 正則無記憶方法
RegExp.prototype.TestNoRecord = function(str){
    var ret = this.test(str);
    this.lastIndex = 0;
    return ret;
}
RegExp.prototype.ExecNoRecord = function(str){
    var ret = this.exec(str);
    this.lastIndex = 0;
    return ret;
}
相關文章
相關標籤/搜索