我尝试在某些HTML字符串中匹配第一次出现的window.location.replace("http://stackoverflow.com")
。
特别是我想捕获整个HTML字符串中第一个window.location.replace
条目的URL。
因此,为了捕获URL我制定了这两条规则:
window.location.redirect("
")
为了实现它,我认为我需要使用lookbehind(第1条规则)和lookahead(第2条规则)。
我最终得到了这个正则表达式:
.+(?<=window\.location\.redirect\(\"?=\"\))
它不起作用。我甚至不确定像我一样混合这两个规则是合法的。
请帮我翻译我的规则到正则表达式?其他方式这样做(没有前瞻(后面))也赞赏。
答案 0 :(得分:1)
您编写的模式实际上不是您需要的模式,因为它与您期望的内容完全不同:text window.location.redirect("=")
中的text window.location.redirect("=") something
。如果您从?
之前删除\"
,它将会only work in PCRE/Python(因为在PCRE中,lookbehinds应该是固定宽度的)。它将与.NET正则表达式中的?
一起使用。
如果是JS,你就不能使用lookbehind,因为它的正则表达式引擎不支持它们。
相反,请在想要获取的未知部分周围使用捕获组:
/window\.location\.redirect\("([^"]*)"\)/
或
/window\.location\.redirect\("(.*?)"\)/
请参阅regex demo
否/g
修饰符将仅允许匹配一次,第一次出现。访问第1组内所需的值。
([^"]*)
捕获除双引号之外的0+个字符(您需要的URL不应该包含它)。如果这些网址包含"
,则应使用第二种方法,因为(.*?)
将匹配除第一个")
之前的换行符以外的任何0+个字符。