在网站上,用户在搜索框中输入一些文字,例如字母" 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错了。
为什么这些名称在正则表达式失败?
答案 0 :(得分:5)
在全局模式下,test
方法从lastIndex
开始,即使您使用其他字符串,也会更新并且不会重置。手动将其重置为0应该可以解决问题:
...
regexp.lastIndex = 0
if(!regexp.test(textToSearch))
...