JavaScriptコードからコメントを切り取る必要があるファイルパーサーに取り組んでいます。'//'
重要なのは、コメントの始まりとして文字列内のシーケンスを使用しないように、スマートである必要があるということ です。私はそれを行うために次のアイデアを持っています:
行を繰り返します。最初にシーケンスを検索し、次に引用符(または)で'//'
囲まれたすべての文字列を検索してから、すべての文字列の一致を繰り返し処理して、シーケンスがそれらの文字列の1つの内側または外側にあるかどうかを確認します。それがそれらの外にある場合、それが適切なコメントの始まりになることは明らかです。'
"
'//'
次の行でコードをテストする場合(もちろん、より大きなjsファイルの一部):
document.getElementById("URL_LABEL").innerHTML="<a name=\"link\" href=\"http://"+url+"\" target=\"blank\">"+url+"</a>";
問題が発生しました。私の正規表現コード:
re_strings=re.compile(""" "
(?:
\\.|
[^\\"]
)*
"
|
'
(?:
[^\\']|
\\.
)*
'
""",re.VERBOSE);
for s in re.finditer(re_strings,line):
print(s.group(0))
Python 3.2.3(および3.1.4)では、次の文字列が返されます。
"URL_LABEL"
"<a name=\"
" href=\"
"+url+"
" target=\"
">"
"</a>"
文字列を終了するべきではないので、これは明らかに間違ってい\"
ます。私はかなり長い間正規表現をデバッグしてきましたが、ここで終了するべきではありません。そこで、参考のためにhttp://re-try.appspot.com/にあるRegexBuddy(Python互換性あり)とPythonregexテスターを使用しました。最も独特なことは、両方とも私のコード以外の同じ正しい結果を返すことです。つまり、次のとおりです。
"URL_LABEL"
"<a name=\"link\" href=\"http://"
"\" target=\"blank\">"
"</a>"
私の質問は、それらの違いの原因は何ですか?私は何を見落としましたか?私はPythonと正規表現の両方の初心者なので、答えは簡単かもしれません...
PS'//'
シーケンスが文字列引用符の中にあるかどうかを見つけるには、1つの大きな正規表現を使用して実行できることを知っています。私はすでにそれを試し、同じ問題に遭遇しました。
PPS何が間違っているのか、コードと正規表現テストアプリケーションの動作に違いがある理由を知りたいのですが、JavaScriptコードを解析する他のアイデアは見つかりません。