<script>
var opts = /(>)|(<)|(>=)|(<=)/gi;
function f(){
var msg = "aa>65";
alert(opts.test(msg));
}
</script>
<input type="button" value="Test" onclick="f();"/>
不停的点击按钮,提示正则表达式执行结果不一致,为什么会这样?

解决方案 »

  1.   

    开启全局匹配后,每次 执行test方法 将会在前一次的 上一次匹配的位置开始向后搜索匹配可以把 全局模式去掉 var opts = /(>)|(<)|(>=)|(<=)/i;
        function f(){
            var msg = "aa>65";
            alert(opts.test(msg));
        }或者重置 lastIndex 属性
     var opts = /(>)|(<)|(>=)|(<=)/gi;
        function f(){
            var msg = "aa>65";
    opts.lastIndex = 0;
            alert(opts.test(msg));
        }正则声明在函数中,每次执行 f() 都是创建一个新的 RegExp 实例.
    声明在外面时,每次执行都是使用原来的那个