正则表达式test()
让我在Firefox和Chrome中遇到问题,但它在Opera和Safari中运行完美。
麻烦的代码:
var pattern = /(\s+(?!\$\w+)|(^(?!\$\w+)))/g;
if(pattern.test(String(id).replace(/\s+OR|AND\s+/g, ''))) {
searchError("You suck.");
return 1;
}
当你进入白色空间时,它每次都会阻挡它。当您传递'$a b'
之类的内容时,它会在Firefox / Chrome中每隔一段时间运行一次。 WEIRD。
答案 0 :(得分:65)
这是RegEx引擎中的一个错误,a similar question with the same issue came up here。
从我对该问题的回答:这是在ECMAScript 3 there's a great post on the details here中实现正则表达式的方式的错误。
基础知识为/regex/
且g
修饰符未正确重置,因此如果每个人<{1}},.test()
和true
之间会有多个false
次来电。 em>应该为true
,其他所有调用都会成功重置它。
答案 1 :(得分:0)
这似乎仍然是 2021 年 8 月的一个问题......我只是想分享一些我在偶然发现这个问题和答案之前学到的东西。我被这个问题弄糊涂了,没有任何有意义的前进方向 - 直到现在。
使用 exec()
或 test()
或 match()
都没有关系。正则表达式仍然无法在所有其他情况下正常工作。
设置正则表达式没关系
let reg = new RegExp(/<table(\s*[^>]*)>/g);
或使用 const
。无论是全局设置还是本地设置都没关系...
绕过此问题的作用是将正则表达式语句括在循环中的括号中,如下所示:
Object.keys(table).forEach(key => {
if((new RegExp(/<table(\s*[^>]*)>/g)).test(___your test string___)){
//Do what you need to do
}
});
去掉正则表达式周围的括号,然后观察其他一个都失败......
非常感谢@Nick Craver 的回答和@prototype 的评论!
This exact Regex 给我带来了麻烦。它对一个对象有效,而对后续对象失败,这毫无意义。我只是想说这在 2021 年仍然非常相关。