JavaScriptのニュアンスをより深く理解したいと思います。
以下の関数を使用します。
str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
ret[param] = value;
});
- なぜ /g が必要なのですか?
- 関数には正確に何が渡されますか?
- これらの値はどこから来たのですか?
ありがとう!
JavaScriptのニュアンスをより深く理解したいと思います。
以下の関数を使用します。
str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
ret[param] = value;
});
ありがとう!
なぜ /g が必要なのですか?
おそらく、一致する文字列に複数のペアがあるためです。a:'b' c:'d'
関数には正確に何が渡されますか?
コールバック関数は、一致全体を最初の引数として取得します。後の 2 つの引数は、正規表現で指定されたキャプチャ グループです。
例えば:
"a:'b' c:'d'".replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
console.log($0, param, value);
});
コールバックは 2 回実行され、最初の実行で"a:'b'"
for $0
、"a"
for param
、および"b"
forが表示されます。value
2 回目の実行 (2 回目の一致) では、 "c:'d'"
for $0
、"c"
for param
、および"d"
for の値が表示されます。
/gのgはグローバルを表します。これにより、すべての一致が置き換えられます。/ gがない場合、最初の一致のみが置き換えられます。/ i(大文字と小文字を区別しない)は、もう1つの一般的に使用されるスイッチです。
javascriptエンジンは、文字列内で(正規表現の)一致を見つけるたびに、各一致のパラメーターを使用して渡した関数を呼び出します。
ここで詳しく説明します