new RegExp里的值为空,竟然可以全文匹配,这是为什么?

<input type="text" id="aa">
<div class="bb"></div>

var arr=['tom','jack','mary','peter','jomo']
$('#aa').keyup(function(){
    var patt1 = new RegExp($('#aa').val());
    var cc=''
            for(var i=0;i<arr.length;i++){
                if(patt1.test(arr[i])){
                    cc+=arr[i]+','
                }
            }
            $('.bb').html(cc)
})

问题描述:当我输入a时,可是匹配出jack,mary。
但是当我把输入框里的值清空,竟然可以匹配出tom,jack,mary,peter,jomo, 竟然把所有的都匹配出来了。
这是为什么呢?我觉得应该是啥都匹配不到才对额。
在线代码,请大家查阅
http://jsbin.com/xilepoxuzi/e...

阅读 4.2k
4 个回答

清空了的话,说明是匹配空字符串,你创建的正则对象如下:

var patt1 = new RegExp('');

由于每个字符串都有空字符,所以就匹配了

test匹配到满足条件的时候返回true,什么都不写就是匹配空字符串,任何字符串都包含空字符串。所以都匹成功了

清空就是匹配空字符串,new RegExp($('#aa').val()||null);就不会匹配空字符串了

这样写比较好 new RegExp($('#aa').val()||/.^/);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题