Javascript RegExp在简单输入上失败

时间:2014-10-29 11:55:49

标签: javascript regex

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

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

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

稍后我循环遍历一些字符串,并针对正则表达式测试它们。我希望测试不区分大小写,所以" o"和" 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);
    }
}

不幸的是,我得到了以下奇怪的结果。我制作了一个jsfiddle(http://jsfiddle.net/grs9xpek/)来表明这一点。

过滤字母&#39; o&#39;:

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

- &GT; scriptTemplate.docx错了。

过滤单词&#39; ont&#39;

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

- &GT; ontwerpbesluitenbundel_body.xta错了。

为什么这些名称在正则表达式失败?

1 个答案:

答案 0 :(得分:5)

在全局模式下,test方法从lastIndex开始,即使您使用其他字符串,也会更新并且不会重置。手动将其重置为0应该可以解决问题:

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