多くの 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);
私は厳しすぎるか、それとも緩すぎますか? - 私の正規表現はうまく書かれていますか?それとも何らかの方法で改善できますか?