次のコードではalert(a)
、JavaScriptのreplace関数の内部で、一致した文字列(この場合は{name}と{place})に警告が表示されます。
これは、ドキュメントjavascript docsで説明されているように機能します。つまり、replaceメソッドの関数の最初の引数は、一致した文字列になります。以下のコードでは、alert(b)
は「名前」と「場所」を警告しますが、それらの周りに中括弧はありません。
何故ですか?'b'の中括弧をどのように削除しますか?これがフィドル ですhttp://jsfiddle.net/mjmitche/KeHdU/
さらに、ドキュメントからこの例を見ると、
function replacer(match, p1, p2, p3, offset, string){
// p1 is nondigits, p2 digits, and p3 non-alphanumerics
return [p1, p2, p3].join(' - ');
};
この例のどのパラメーターが、以下の置換関数のfunction(a、b)の「b」を表しますか?
私の理解の失敗の一部は、たとえば、最大数の引数が使用されていない場合に2番目のパラメーターでjavascriptが何をするのかわからないという事実が原因である可能性があります。
コード
var subObject = {
name: "world",
place: "google"
};
var text = 'Hello, {name} welcome to {place}';
var replace = function (s, o) {
return s.replace(/\{([^{}]*)\}/g,
function (a, b) {
alert(a);
alert(b);
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
var replacedText = replace(text, subObject);
alert(replacedText);