gpt4 book ai didi

javascript - Firefox 在针对正则表达式编译长词时抛出过于复杂的错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:53:31 26 4
gpt4 key购买 nike

我有一个正则表达式如下:

var str="checkedchec  ";
var patt=/.*(?:\w+|\S)*\s+(or|and|not|xnot|near|near\d+|onear|onear\d+|title\:|ingress\:|\?|\*|\^|sourceid\:|author\\:|url\:|country\:)\s+.*/i;

var newStr = str.split(patt);

var result=patt.test(str);

上面的正则表达式大部分工作正常,但是当我有一个超过 11 个字符的字符时,它会给出“表达式太复杂”,Mozilla firefox 除外。它在 IE 和 Chrome 上运行良好。

最佳答案

您的正则表达式遇到了 catastrophic backtracking .您可以在其中交替使用可以匹配相同内容的部分(例如,由 \w 匹配的每个字符也可以由 \S 匹配,并且由前面的 .*) 因此正则表达式引擎必须在宣布失败之前尝试大量排列。例如,RegexBuddy 在正则表达式引擎执行 100 万步后中止匹配尝试,而 Firefox 显然也在做同样(明智的)事情。

你到底想做什么?

将正则表达式更改为

/.*\s+(or|and|not|xnot|near|near\d+|onear|onear\d+|title:|ingress:|\?|\*|\^|sourceid:|author:|url:|country:)\s+.*/i

大大加快了匹配速度(现在只有 408 步,直到正则表达式引擎可以宣布失败)。

关于javascript - Firefox 在针对正则表达式编译长词时抛出过于复杂的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com