Javascript 正则表达式仅在Safari上失败

Javascript 正则表达式仅在Safari上失败,javascript,regex,safari,Javascript,Regex,Safari,我有以下简单的电子邮件验证正则表达式:/(.+){2,}@(.+){2,}\(.+){2,}/ 这在Firefox、Chrome等上运行良好,但在Safari上失败 为什么这个完全有效的正则表达式在Safari上会失败?我在正则表达式中找不到Safari不支持的元素 /(.+){2,}@(.+){2,}\.(.+){2,}/.test('123@abc.nl'); 以上内容在Safari上失败,但在任何其他浏览器上都失败。不同的正则表达式引擎对灾难性回溯模式的容忍度不同 当您使用使(.+)匹配

我有以下简单的电子邮件验证正则表达式:
/(.+){2,}@(.+){2,}\(.+){2,}/

这在Firefox、Chrome等上运行良好,但在Safari上失败

为什么这个完全有效的正则表达式在Safari上会失败?我在正则表达式中找不到Safari不支持的元素

/(.+){2,}@(.+){2,}\.(.+){2,}/.test('123@abc.nl');

以上内容在Safari上失败,但在任何其他浏览器上都失败。

不同的正则表达式引擎对灾难性回溯模式的容忍度不同

当您使用使
(.+)
匹配两次或多次的
(.+)
量词对
(.+)
进行量化时,您的模式很容易出现灾难性的回溯(也就是说,两次或多次匹配一次或多次,这使得使用不匹配的模式失败的速度非常缓慢)

如果要匹配任意两个或多个字符,请量化
模式,而不是
+
模式:

/.{2,}@.{2,}\..{2,}/

或者,使用现有的。

正则表达式很糟糕,您不应该像那样量化
(.+)
。它应该写为
/.{2,}@.{2,}\..{2,}/
,尽管如此,Safari和其他浏览器之间的行为不应该不一致,对吧?Safari真的不喜欢这些组。不,不同的正则表达式引擎对灾难性回溯模式有不同的容忍度。