0

この JavaScript の穴がどのように機能するのか、誰か説明してもらえますか ??? :D 開かれる Twitter ウィンドウからデータ (ユーザー名) を取得する穴です...

alert('Hello '+/^https:\/\/twitter.com\/([^/]+)/.exec(win.location)[1])
4

1 に答える 1

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、他の方法で文字列を使用する場合)プロセス:

  1. 「https://twitter.com/」を検索 --> TRUE: 続行
  2. 次の文字を見る --> "n" !== "/" --> TRUE: 集めて続行
  3. 次の文字を見る --> "e" !== "/" --> TRUE: 集めて続行
  4. 次の文字を見る --> "r" !== "/" --> TRUE: 集めて続行

13.次の文字を見る --> "s" !== "/" --> TRUE: 集めて
次に進む 14.次の文字を見る --> "/" !== "/" --> FALSE : 集めた手紙をすべて返す

PS: 注意しないと、そこにあるコードが深刻な問題を引き起こします。RegEx が失敗した場合 (まったく一致しない場合など)、配列を返す代わりに、 を返しますnull
試してみるとnull[1];、JS は怒ってエラーをスローします。

于 2012-10-19T00:40:15.173 に答える