Javascript 什么';我应该允许的最大长度是多少以避免灾难性的回溯?

Javascript 什么';我应该允许的最大长度是多少以避免灾难性的回溯?,javascript,regex,Javascript,Regex,该行的长度约为7915621,实际上是ASPX网站的视图状态值 我获取站点的原始HTML,然后逐行将其传递给extract函数,当它到达包含该长字符串的view_state行时,正则表达式就卡住了 这是被卡住的正则表达式模式 /[\w\.]+\@[\w]+(?:\.[\w]{3}|\.[\w]{2}\.[\w]{2})\b/gi 我曾考虑设置一个最大行长度来跳过这一行或任何其他类似的行,但我想不出一个最佳的大小,因为我关心误报。[\w\.]+在文档中被多次发现,因此用表达式处理它们就成了一个问

该行的长度约为7915621,实际上是ASPX网站的视图状态值

我获取站点的原始HTML,然后逐行将其传递给extract函数,当它到达包含该长字符串的view_state行时,正则表达式就卡住了

这是被卡住的正则表达式模式

/[\w\.]+\@[\w]+(?:\.[\w]{3}|\.[\w]{2}\.[\w]{2})\b/gi

我曾考虑设置一个最大行长度来跳过这一行或任何其他类似的行,但我想不出一个最佳的大小,因为我关心误报。

[\w\.]+
在文档中被多次发现,因此用表达式处理它们就成了一个问题

减少开始搜索的位置数量是一个可能的解决方案。例如,使用单词边界

(?:\.\w{3}.\w{2}.\w{2})
可以简化为
\.\w{2}(?:\ w{3}.\w{2})

使用

/\b[\w.]+@\w+\.\w{2}(?:\w}.\w{2})\b/gi
或者,去掉括号

/\b\w+(?:\.\w+*@\w+\.\w{2}(?:\w}.\w{2})\b/gi
解释

--------------------------------------------------------------------------------
\b单词char(\w)和
不是单词char的东西
--------------------------------------------------------------------------------
\w+字字符(a-z,a-z,0-9,41;)(1或
更多次(与最多金额匹配)
(可能的)
--------------------------------------------------------------------------------
(?:组,但不捕获(0次或更多次)
(匹配尽可能多的金额):
--------------------------------------------------------------------------------
\.                       '.'
--------------------------------------------------------------------------------
\w+字字符(a-z,a-z,0-9,41;)(1或
更多次(与最多金额匹配)
(可能的)
--------------------------------------------------------------------------------
)*分组结束
--------------------------------------------------------------------------------
@                        '@'
--------------------------------------------------------------------------------
\w+字字符(a-z,a-z,0-9,41;)(1或
更多次(与最多金额匹配)
(可能的)
--------------------------------------------------------------------------------
\.                       '.'
--------------------------------------------------------------------------------
\w{2}字字符(a-z,a-z,0-9,z)(2)
(次)
--------------------------------------------------------------------------------
(?:组,但不捕获:
--------------------------------------------------------------------------------
\w字字符(a-z,a-z,0-9,uz)
--------------------------------------------------------------------------------
|或
--------------------------------------------------------------------------------
\.                       '.'
--------------------------------------------------------------------------------
\w{2}字字符(a-z,a-z,0-9,z)(2)
(次)
--------------------------------------------------------------------------------
)分组结束
--------------------------------------------------------------------------------
\b单词char(\w)和
不是单词char的东西

你在用正则表达式解析HTML页面吗?@Amy No.我在用正则表达式解析HTML页面上的模式。你在解析HTML页面上的模式吗?这是什么意思?@Pointy:不,
[\w\.]+
+
@casimirithippolyte完全不同。怎么说?“任何单词字符或…”哦