javascript - Rhino 中的非终止 RegExp.exec

标签 javascript html regex rhino

我将以下 JavaScript 程序保存在文件 pre.js 中:

var pre = readFile("method-help.html");
RegExp.multiline = true;
print(/<pre>((?:.|\s)+)<\/pre>/.exec(pre)[1]);

method-help.html 的内容就是 http://api.stackoverflow.com/1.0/help/method?method=answers/%7bid%7d 处的页面。 。我想做的是在 pre 标签之间获取 JSON 代码。但是,当我在 Rhino 中运行该程序时,没有打印任何内容,并且该程序不会终止。我使用的命令是:

java -jar js.jar pre.js

我的Rhino版本是1_7R2。

最佳答案

它似乎没有终止的原因可能是由于 .\s 重叠而导致的灾难性回溯(它最终会结束,但它可能是一个很久)。这是一个正确、快速的版本:

var pre = readFile("method-help.html");
print(/<pre>([\s\S]*?)<\/pre>/.exec(pre)[1])

您不需要多行。这只会影响您没有使用的 ^$ 的含义。但是,我们确实使用 \s\S 来表示所有字符(包括换行符等)。我们还使用 *? 来表示零个或多个字符,非贪婪的。问号(非贪婪)在这里并不重要,但如果有多个 pre block ,就会很重要。

关于javascript - Rhino 中的非终止 RegExp.exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222072/

相关文章:

javascript - 如何在 NestJS Controller 处理程序的请求中获取 "validated Body"和 "authenticated user"?

html - 位置固定不适用于视频海报

regex - 正则表达式用于在一个字符串包含另一个字符串时查找两个字符串之一

从字符串创建的 JavaScript 正则表达式 - 为什么它不起作用?

javascript - sproutcore 升级问题

javascript - jQuery访问输入隐藏值

javascript - 如何修改Highcharts中的负轴条形图?

HTML DOM 验证器 - PHP 或 JavaScript

javascript - 选择,然后使用 jQuery 调整具有一定比例的图像

java - 如何忽略 "--"但不忽略 "-"