3

"\w+([\.\-]?\w+)*@" 当它尝试测试它是否匹配一个字符串时,我得到了一个错误的正则表达式

"ffffffffffb3ffffffffffafffffffffffabffffffffffc2ffffffffffa7e"

这将导致IE和Chrome挂起。但是FF可以正常工作。

我发现“?” 在正则表达式中是不必要的。并且在我删除“?”后找到它。

但这是我不明白导致问题的原因。这是一些测试

  1. "\w+([\.\-]?\w+)*"工作正常。

  2. "\w+([\.\-]\w+)*@"工作正常。

  3. "\w+([\.\-]?\w+)*@"导致问题

有谁知道为什么?或者它只是浏览器之间的性能。

4

1 回答 1

5

这称为灾难性回溯

在您的第三个示例中,@(显然会导致正则表达式失败)强制您的正则表达式引擎尝试所有可能的排列\w+(\w+)*(因为字符类是可选的)。有了这样长度的字符串,计算所需的时间将比宇宙热死之前更长。

正则表达式好友截图

Firefox 似乎对正则表达式有迭代限制,并且会在大约一百万次尝试后中止,Chrome 和 IE 似乎在这里更加坚忍。

于 2013-02-06T07:32:04.587 回答