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;
}
相关文章
相关标签/搜索