Regex 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中每隔一次工作。奇怪了
2条答案
按热度按时间js4nwp541#
这是RegEx引擎中的一个错误,这里出现了一个类似的问题。
基本情况是,带有
g
修饰符的/regex/
不能正确重置,因此多个.test()
调用在true
和false
之间交替,如果每个人都应该是true
,则每隔一次调用都会成功重置它。njthzxwz2#
更新:9/27/23 -我仍然遇到这个问题。
考虑以下情况:
1.你正在使用Angular的React式表单,并且正在使用一些内置的功能,比如开箱即用的Validators。
1.你可以使用类似下面的东西。
其中每个验证器都是我在服务器上定义的对象,如下所示(例如):
现在,人们会假设这将固有地工作使用React形式,但它不!它和下面2021年的帖子福尔斯了同一个坑。别被骗了!
我今天偶然发现了这个。
奇怪的是,有效的方法如下:
这不是每一次都失败!
但是,如果你使用类创建一个Regex,使用String...小心点。你得这样做。
其中testValue函数如下:
当我今天处理这个问题的时候,我真的想“我肯定不会在正则表达式上遇到同样的问题……”。结果,我是。
每次创建带有字符串的RegExp时,都有一些话要说。用括号括起来就行了。不管出于什么原因,创建它时不使用字符串文字就可以正常工作。
我希望这一锤点回家。
从本质上讲,当从字符串字面量创建正则表达式时,它似乎行为不当,而当不是从字符串创建时,它似乎很好。
/更新结束
这似乎是2021年8月的一个问题...我只是想分享一些我在偶然发现这个问题和答案之前所学到的东西。我被这个问题所困扰,没有任何有意义的前进方向--直到现在。
1.无论您使用
exec()
还是test()
或match()
都没有关系。正则表达式仍然不能在其他情况下正常工作。1.如果你设置了正则表达式
或者
const
。不管你是全局设置还是局部设置。要绕过这个问题,does 的工作是在循环中将regex语句 Package 在括号中,如下所示:
去掉正则表达式周围的括号,然后看着其他正则表达式失败......
非常感谢你的回答@Nick Craver和评论@prototype!
This exact Regex是给我带来麻烦的东西。它对一个对象有效,对下一个对象无效,这毫无意义。我在这里只是想说,这在2021年仍然非常重要。