正则表达式仅在 Safari 上失败

Regex fails only on Safari

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

这在 Firefox、Chrome 等上工作正常,但在 Safari 上失败。

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

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

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

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

当您使用 {2,} 量词量化 (.+) 时,您的模式是一种灾难性的回溯倾向模式,使 (.+) 匹配两次或多次(即两次匹配一次或多次)或更多,这使得它在不匹配的模式下失败得非常慢。)

如果您打算匹配任何两个或更多字符,请量化 . 模式而不是 .+ 模式:

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

或者,使用现有的 email validation patterns.