Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式模式在边缘情况下会导致灾难性的回溯_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式模式在边缘情况下会导致灾难性的回溯

Javascript 正则表达式模式在边缘情况下会导致灾难性的回溯,javascript,regex,Javascript,Regex,我有这两个简单的正则表达式模式来匹配这些存储中的url,但是当在带有边缘大小写的字符串url上运行时,它们会导致灾难性的回溯和冻结浏览器。这种逻辑在数千个随机请求上运行,因此灾难性回溯的可能性很高。有没有人知道我写这个正则表达式的方式可能有什么问题 > ".*://.*.newegg.com/Product/Product.*" > ".*://.*.gamestop.com*.*Product-Variation*.*productDetailsRed

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

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

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

\w+://[^/]*\.newegg\.com/Product/Product\S*
第二种模式:

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

使用
\S*?
匹配任何与空白不同的字符(尽可能少)

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


如果您知道在一个匹配中两个子字符串之间不能有这样的字符,请使用
[^…]
求反字符类。

*
匹配任何字符0次或多次,并且将首先匹配到字符串的结尾。然后,它可以回溯到所有选项,看看它是否适合该模式的其余部分。使用另一个
*
将添加更多可供探索的选项。如果没有匹配(边缘情况),它仍将尝试所有选项。请注意,如果有意,请确定,但请注意,
m*
n*
可以匹配0次或更多次a
m
n