我正在尝试为我用 Python 编写的 javascript 预处理器添加一些轻量级的降价支持。
大多数情况下它都在工作,但有时我使用的正则表达式有点奇怪,我认为它与原始字符串和转义序列有关。
正则表达式是:(?<!\\)\"[^\"]+\"
是的,我知道它只匹配以字符开头的"
字符串。然而,这个项目是出于好奇而诞生的,所以我现在可以忍受它。
分解它:
(?<\\)\" # The group should begin with a quotation mark that is not escaped
[^\"]+ # and match any number of at least one character that is not a quotation mark (this is the biggest problem, I know)
\" # and end at the first quotation mark it finds
话虽如此,我(显然)开始遇到这样的问题:
"This is a string with an \"escaped quote\" inside it"
我不太确定如何说“除了引号之外的所有内容,除非该标记被转义”。我试过:
([^\"]|\\\")+ # a group of anything but a quote or an escaped quote
,但这会导致非常奇怪的结果。
我已经做好充分准备听到我将这一切都错了。为简单起见,假设此正则表达式将始终以双引号 ( "
) 开头和结尾,以避免在混合中添加另一个元素。我真的很想了解我到目前为止所拥有的。
感谢您的任何帮助。
编辑
作为对正则表达式的测试,我正在尝试使用以下代码(使用下面的 unutbu 模式)在缩小的 jQuery 脚本中查找所有字符串文字:
STRLIT = r'''(?x) # verbose mode
(?<!\\) # not preceded by a backslash
" # a literal double-quote
.*? # non-greedy 1-or-more characters
(?<!\\) # not preceded by a backslash
" # a literal double-quote
'''
f = open("jquery.min.js","r")
jq = f.read()
f.close()
literals = re.findall(STRLIT,jq)
下面的答案几乎解决了所有问题。确实出现的情况是在 jquery 自己的正则表达式中,这是一个非常边缘的情况。该解决方案不再将有效的 javascript 错误识别为降价链接,这才是真正的目标。