使用IE&;匹配正则表达式时javascript挂起;铬

使用IE&;匹配正则表达式时javascript挂起;铬,javascript,regex,internet-explorer,google-chrome,Javascript,Regex,Internet Explorer,Google Chrome,我得到了一个有缺陷的正则表达式“\w+([\.\-]?\w+*@” 当它尝试测试它是否匹配字符串时 "ffffffffffb3ffffffffffafffffffffffabffffffffffc2ffffffffffa7e" 这将导致IE和Chrome挂起。但在FF下效果很好 我发现正则表达式中的“?”是不必要的。当我去掉“?”后,它就工作了 但我不明白问题的原因是什么。 这里有一些测试 “\w+([\.\-]?\w+*”工作正常 “\w+([\.\-]\w+*@”工作正常 “\w+([\.

我得到了一个有缺陷的正则表达式
“\w+([\.\-]?\w+*@”
当它尝试测试它是否匹配字符串时

"ffffffffffb3ffffffffffafffffffffffabffffffffffc2ffffffffffa7e"
这将导致IE和Chrome挂起。但在FF下效果很好

我发现正则表达式中的“?”是不必要的。当我去掉“?”后,它就工作了

但我不明白问题的原因是什么。 这里有一些测试

  • “\w+([\.\-]?\w+*”
    工作正常

  • “\w+([\.\-]\w+*@”
    工作正常

  • “\w+([\.\-]?\w+*@”
    导致问题

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

    这就是所谓的

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

    Firefox似乎对正则表达式有一个迭代限制,并将在大约一百万次尝试后中止,Chrome和IE在这方面似乎更为坚忍