我正在开发一个需要从 JavaScript 代码中删除注释的文件解析器。问题是它必须很聪明,所以它不会将 '//'
字符串中的序列作为评论的开始。我有以下想法:
遍历行。首先查找序列,然后在行中查找所有用引号 (或)'//'
包围的字符串,然后遍历所有字符串匹配项以检查序列是在其中一个字符串之内还是之外。如果它在他们之外,很明显这将是一个适当的评论开始。'
"
'//'
在以下行测试代码时(当然是更大的 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 兼容)和Python 正则表达式测试器作为参考。最奇怪的是,除了我的代码之外,它们都返回相同的正确结果,即:
"URL_LABEL"
"<a name=\"link\" href=\"http://"
"\" target=\"blank\">"
"</a>"
我的问题是这些差异的原因是什么?我忽略了什么?我是 Python 和正则表达式的初学者,所以答案可能很简单......
PS我知道'//'
可以使用一个更大的正则表达式来查找序列是否在字符串引号内。我已经尝试过并遇到了同样的问题。
PPS我想知道我做错了什么,为什么我的代码和正则表达式测试应用程序的行为存在差异,没有找到如何解析JavaScript代码的其他想法。