首页 > 解决方案 > 正则表达式模式导致极端情况下的灾难性回溯

问题描述

我有这两个简单的正则表达式模式来匹配来自这些商店的 url,但是当在一些带有边缘情况的字符串 url 上运行时,它们会导致灾难性的回溯和冻结的浏览器。该逻辑在数千个随机请求上运行,因此灾难性回溯的可能性很高。有没有人知道我写这个正则表达式的方式可能有什么问题。

> ".*://.*.newegg.com/Product/Product.*"
> ".*://.*.gamestop.com*.*Product-Variation*.*productDetailsRedesign"

标签: javascriptregex

解决方案


表达式中有太多贪婪的点模式。尝试更详细一点:

\w+://[^/]*\.newegg\.com/Product/Product\S*

第二种模式:

\w+://[^\s/]*\.gamestop\.com\S*?Product-Variation\S*?productDetailsRedesign

证明#1 | 证明#2

用于\S*?匹配任何不同于空格的字符(尽可能少)。

转义句点字符,因为它们是正则表达式元字符。

[^...]如果您知道匹配中的两个子字符串之间不能有这样的字符,请使用否定字符类。


推荐阅读