我试图从许多 HTML 页面中捕获尽可能多的 Javascript 重定向。我的正则表达式是:
((location.href)|(window.location)|(location.replace)|(location.assign))(( ?= ?)|( ?\( ?))("|')([^'"]*)("|')( ?\) ?)?;
我使用 Python,但问题很笼统:
regex = re.compile(r"""((location.href)|(window.location)|(location.replace)|(location.assign))(( ?= ?)|( ?\( ?))("|')([^'"]*)("|')( ?\) ?)?;""", re.I)
# ... some control here ...
print re.search(regex, html).group(10) # 10 is the pure url
我做了一些测试,我能够捕捉到所有这些情况。
location.href = "http://www.foo.com";
location.href="http://www.foo.com";
window.location = "http://www.foo.com";
window.location.href = "http://www.foo.com";
location.replace ("http://www.foo.com");
location.replace( "http://www.foo.com" ) ;
location.assign ("http://www.foo.com");
并跳过我无法解析 URL 的地方,因为代码包含一个变量:
location.href = "http://www.foo.com" + var + "something else";
问题是:
- 还有其他使用 Javascript 重定向的方法吗?其他
location.somethingelse
我想念的? - 我抓住这4个案例的方式是否正确?是否允许有类似的东西,
location.href = http://www.foo.com;
或者location.replace (http://www.foo.com);
我会因为(双)引号而错过?我是太严格还是太松懈? - 我的正则表达式写得好吗?或者我可以以某种方式改进它吗?