Javascript RegExp在简单输入时失败

Javascript RegExp failing on simple input

本文关键字:失败 输入 简单 RegExp Javascript      更新时间:2023-09-26

在网站上,用户在搜索框中输入一些文本,例如字母"o"。

这将在网站的javascript代码中创建以下正则表达式:

var filterSubstring = $("#FilterOnSubstringBox").val();
var regexp = new RegExp(filterSubstring,"gi");

稍后,我对一些字符串进行循环,并使用正则表达式对它们进行测试。我希望测试是不区分大小写的,所以"o"answers"o"都应该匹配:

for(var i = 0; i < array.length; i++)
{
    var textToSearch = array[i].name;
    if(!regexp.test(textToSearch))
    {
        alert("NOT OK: " + textToSearch + " DID NOT CONTAIN: " + filterSubstring);  
    }
    else
    {
        alert("OK! " + textToSearch + " CONTAINS: " + filterSubstring);
    }
}

不幸的是,我得到了以下奇怪的结果。我做了一把小提琴(http://jsfiddle.net/grs9xpek/)来展示这一点。

过滤字母'o'时:

OK!: ontwerpbesluitenbundel.dmt CONTAINS: o
OK!: ontwerpbesluitenbundel_body.xta CONTAINS: o
NOT OK: ScriptTemplate.docx DID NOT CONTAIN: o
OK!: ShippingOrder.xta CONTAINS: o
NOT OK: header.xta DID NOT CONTAIN: o

->scriptTemplate.docx错误。

在单词"ont"上进行筛选时

OK!: ontwerpbesluitenbundel.dmt CONTAINS: ont
NOT OK: ontwerpbesluitenbundel_body.xta DID NOT CONTAIN: ont
NOT OK: ScriptTemplate.docx DID NOT CONTAIN: ont
NOT OK: ShippingOrder.xta CONTAINS: ont
NOT OK: header.xta DID NOT CONTAIN: ont

->ontwerpbesluitenbundel_body.xta是错误的。

为什么这些名称不符合regexp?

在全局模式中,test方法从lastIndex开始,即使使用不同的字符串,它也会更新而不会重置。手动将其重置为0应该可以纠正问题:

    ...
    regexp.lastIndex = 0
    if(!regexp.test(textToSearch))
    ...