Javascript RegExp在简单输入时失败
Javascript RegExp failing on simple input
在网站上,用户在搜索框中输入一些文本,例如字母"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))
...
相关文章:
- Html<输入模式>使用JavaScript处理-超过时失败
- $q.all当输入数组中的一项不是promise时,Typescript检查器失败
- 将两个隐藏输入与简单的 JavaScript 进行比较失败
- ExtJs 4 GridPanel with CellEdit:输入的数据在验证失败时丢失
- 删除带有按钮的输入表单失败
- Javascript OOP:通过输入将值传递给属性失败
- jQuery - 如果这个或这个得到失败的输入名称
- JQuery 验证输入类型文件在服务器端失败
- 如何在验证失败弹簧 MVC 时保留输入表单值
- 如果输入文件丢失,有没有办法导致 Grunt 插件失败
- 验证失败时突出显示的输入字段
- 在Firefox扩展中的输入文件元素上单击操作失败
- 通过JQuery设置输入字段值会使AngularJS上所需的验证失败
- Jquery悬停在子分区输入时失败
- Javascript RegExp在简单输入时失败
- AngularJS中将筛选器结果绑定到输入失败
- 为什么当输入包含换行符时regex会失败
- 用户使用javascript生成的输入字段,如果验证失败,我如何将他们的数据填充回输入字段
- 输入键表单提交失败,HTML5日期输入
- 通过javascript重置HTML输入字段失败