Firefox 3.6.20 regex给出不一致的结果
firefox 3.6.20 regex giving inconsistent results
我调试这个应用程序已经有一段时间了,它让我看到了这个测试用例。当我在firefox 3.6中运行它时。X,它只有50%的时间有效。
var success = 0;
var pat = /('d{2})'/('d{2})'/('d{4})'s('d{2}):('d{2})'s(am|pm)/g;
var date = "08/01/2011 12:00 am";
for(var i=0;i<100;i++) if(pat.exec(date)) success++;
alert("success: " + success + " failed: " + (100 - success));
它警告success: 50 failed: 50
这是怎么回事?
g
标志表示,在第一次匹配之后,第二次搜索从匹配的子字符串的末尾开始(即在字符串的末尾),并且失败,将开始位置重置为字符串的开头。
如果正则表达式使用"
g
"标志,则可以多次使用exec
方法在同一字符串中查找连续匹配。当您这样做时,搜索从正则表达式的lastIndex
属性指定的str
的子字符串开始(test
也将推进lastIndex
属性)。
从MDC文档RexExp.exec()。(参见RegExp.lastIndex)
您正在使用全局标志。因此,正则表达式只匹配特定的索引。每次匹配后,pat.lastIndex == 19
,然后pat.lastIndex == 0
,等等。
一个更简单的例子:
var r = /'d/g;
r.exec("123"); // 1 - lastIndex == 0, so matching from index 0 and on
r.exec("123"); // 2 - lastIndex == 1, ditto with 1
r.exec("123"); // 3 - lastIndex == 2, ditto with 2
r.exec("123"); // null - lastIndex == 3, no matches, lastIndex is getting reset
r.exec("123"); // 1 - start all over again
相关文章:
- 使用forEach和.shift()时结果不一致
- 将base64图像数据作为src分配给图像时,Firefox和Chrome上的结果不一致
- Meteor SmartCollection给出不一致的结果
- 返回不一致结果的日期(取决于是否存在前导零)
- Jasmine 测试在测试运行中、Firefox/Chrome 之间以及检查器开/关时的结果不一致
- 为什么结果与此装饰函数中的预期不一致
- 使用边界放置搜索请求,结果不一致
- 比较Javascript中的日期-结果不一致
- 为什么这种排序算法会在浏览器之间产生不一致的结果
- Jquery排序结果不一致
- 由于异步表单提交,结果不一致
- Javascript通配符regex搜索结果不一致
- 为什么使用按钮或Div运行查询会返回不一致的结果?
- Firefox 3.6.20 regex给出不一致的结果
- jQuery UI -多个自动完成-不一致的结果
- Javascript所见即所得文本区域插件在不同浏览器中产生不一致的结果
- 不一致的HTML5画布结果
- mongo结果与唯一字段不一致
- 不一致的 getTimezoneOffset 结果
- PHP密码哈希算法结果与Javascript结果不一致