0

次の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です。

4

1 に答える 1

2

終了しないように見える理由は、おそらくオーバーラップによる壊滅的なバックトラッキングです.\s最終的には終了しますが、長い時間がかかる可能性があります)。正しい高速バージョンは次のとおりです。

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

必要ありませんmultiline。これは、使用していない^との意味にのみ影響します。$ただし、すべての文字(改行などを含む)\s\Sを意味するために使用します。また、貪欲ではない、0個以上の文字を意味するために使用します。疑問符(欲張りでない)はここでは重要ではありませんが、複数のブロックがある場合は問題になります。*?pre

于 2010-07-11T06:24:14.097 に答える