最初に例、次に質問...
例 1) '?sort=alpha&direction=asc' の非グローバル マッチ
'?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/);
出力:
// ['sort=alpha', 'sort', '=alpha', 'alpha']
例 2) '?sort=alpha&direction=asc' のグローバル マッチ
'?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/g);
出力:
// ['sort=alpha', 'sort', '=alpha', 'alpha']
例 3) '?sort=alpha&direction=asc' のグローバル マッチ置換
getRequestParameters: function () {
var query_string = {},
regex = new RegExp('([^?=&]+)(=([^&]*))?', 'g');
'?sort=alpha&direction=asc'.replace(regex, function(match, p1, p2, p3, offset, string) {
console.log(match, p1, p2, p3, offset, string);
query_string[p1] = p3;
});
}
出力:
// sort=alpha sort =alpha alpha 1 ?sort=alpha&direction=asc
// direction=asc direction =asc asc 12 ?sort=alpha&direction=asc
私の質問
これを自分で考え出すことができたかどうかはわかりませんが、解決策を「生きる」ことは決してなく、理由の背後にある韻を理解しなければなりません. 特定の試合は「十分に」理解していると思います。以下の答えのいくつかを知っていると思いますが、推測をしたり、賢い人から学ぶことはしません。
- なぜ 1) と 2) は同じなのですか? (または彼らですか?)
- 1) と 2) の「sort=alpha」はどういう意味ですか?
- 2) が並べ替えと方向の両方のパラメーターを返さないのはなぜですか?
- 3) .replace() で繰り返すのは何ですか?
- .replace() なしで N 個のパラメータをキャプチャする方法はありますか?
ありがとう!
アップデート
var regex = new RegExp('([^?&=]+)(=([^&]*))?');
regex.exec('?sort=alpha&direction=asc');
// Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
var regex = new RegExp('([^?&=]+)(=([^&]*))?', 'g');
regex.exec('?sort=alpha&direction=asc');
// Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
'?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/);
// Chrome 21 - ["sort=alpha", "sort", "=alpha", "alpha"]
'?sort=alpha&direction=asc'.match(/([^?&=]+)(=([^&]*))?/g);
// Chrome 21 - ["sort=alpha", "direction=asc"]
var regex = new RegExp('([^?&=]+)(=([^&]*))?', 'g');
regex.lastIndex = 11;
regex.exec('?sort=alpha&direction=asc');
// Chrome 21 - ["direction=asc", "direction", "=asc", "asc"]
要約すると、例 3) は依然として正しいですが、より適切な回答については、この回答にアクセスしてください。
更新を終了する
参照と Steven Benner への感謝:
- https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/match
- https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace
- http://stevenbenner.com/2010/03/javascript-regex-trick-parse-a-query-string-into-an-object/
- http://www.bloggingdeveloper.com/post/JavaScript-QueryString-ParseGet-QueryString-with-Client-Side-JavaScript.aspx (同様のトピックなので、投げ入れました)