zoukankan      html  css  js  c++  java
  • RegExp exec有记忆性的问题

       

        当 RegExpObject 是作为一个变量时时。每次调用完exec()后。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

        重要事项:如果一个RegExpObject变量,在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。

        而实际我们应用中经常使用同一个RegExpObject对象,避免每次匹配重新解析表达式,应该会提升一些效率。

        所以最好是在使用正则表达式前实现如下新的匹配方法。

    // 正则无记忆方法
    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;
    }
  • 相关阅读:
    JNI介绍
    github自己用(未完)
    Android中的内存泄漏问题前世今生(转)
    android开发之OpenGL(三)
    android之PopupWindow焦点问题
    Spring笔记2
    android 存储ANR问题的traces.txt
    Gallery与imageView的onClick事件冲突解决方法
    android小小的开发细节
    PHP网站中整体防注入方法
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/3390242.html
Copyright © 2011-2022 走看看