この JavaScript の穴がどのように機能するのか、誰か説明してもらえますか ??? :D 開かれる Twitter ウィンドウからデータ (ユーザー名) を取得する穴です...
alert('Hello '+/^https:\/\/twitter.com\/([^/]+)/.exec(win.location)[1])
この JavaScript の穴がどのように機能するのか、誰か説明してもらえますか ??? :D 開かれる Twitter ウィンドウからデータ (ユーザー名) を取得する穴です...
alert('Hello '+/^https:\/\/twitter.com\/([^/]+)/.exec(win.location)[1])
これはエクスプロイトではなく、非常に単純な正規表現です。
現在 Twitter を使用している場合、その RegEx は現在のアドレスと比較twitter.com/<USERNAME>/<...>
してその部分を引き出しusername
ます。
それが100%すべてです。
したがって、私が にいる場合https://twitter.com/nerdswguitars/
、RegEx は私が にいることを確認しhttps://twitter.com/
、その後に別の ではないすべての/
文字を探し、それらを収集します。
それらの収集が完了すると(つまり、/
ヒットしたとき、または現在のアドレスの最後にヒットしたとき)、収集された結果が吐き出されます。
var twitterRegEx = /https:\/\/twitter.com\/([^\/]+)/;
var twitterURL = "https://twitter.com/nerdswguitars/";
// (...) collect whatever is in here, to return if it matches
// [ ] compare against any of the characters inside
// [a-z] = compare against all lowercase letters in the English language
// [A-Z] = compare against all uppercase letters in the English language
// [_\-\*] = compare against "_" "-" and "*"
// [^...] = NOT -- compare against all characters NOT in this set
// so [^\/] = compare against any character that's NOT "/"
// + = 1 or more
// [^\/]+ = compare against one or more characters which are NOT "/"
// ([^\/]+) = collect every character which does not match "/"
var regExArray = twitterRegEx.exec(twitterURL); // ["https://twitter.com/nerdswguitars/", "nerdswguitars"]
var userName = regExArray && regExArray[1] || ""; // avoids an error - lots of ways to do this
(exec
またはmatch
、他の方法で文字列を使用する場合)プロセス:
13.次の文字を見る --> "s" !== "/" --> TRUE: 集めて
次に進む 14.次の文字を見る --> "/" !== "/" --> FALSE : 集めた手紙をすべて返す
PS: 注意しないと、そこにあるコードが深刻な問題を引き起こします。RegEx が失敗した場合 (まったく一致しない場合など)、配列を返す代わりに、 を返しますnull
。
試してみるとnull[1];
、JS は怒ってエラーをスローします。