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

标签 javascript regex firefox

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

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/

相关文章:

javascript - 拖放,使draggable为假

javascript - 使用 AJAX 提交表单不起作用

python - 用于匹配 Python 列表中特定模式的正则表达式

javascript - 正则表达式 - 3 个字母到大写

linux - (Linux)火狐浏览器: audio not working but my system audio works properly

html - PNG 只显示在 chrome 而不是 safari 或 firefox

firefox - http-on-examine-response 观察者 - 可以阻止进一步处理的响应吗?

javascript - 未捕获的范围错误: Maximum call stack size exceeded in browser console

javascript - 打字时的 Asp.net 数字分组

C# 正则表达式用于查找文本中的特定模式