在下面的代碼中,JavaScript替換函數中的alert(a)
將提示匹配的字符串,在這種情況下,它將是{name}和{place}。JavaScript替換
這適用於文檔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(' - ');
};
其中的參數在這個例子中「B」的功能(A,B)的替換功能代表?
我未能理解的部分原因可能是由於我不確定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);
所以大括號不是捕獲組的一部分(因此不包含在參數b中),因爲它們不在括號內? – BrainLikeADullPencil
@BrainLikeADullPencil:是的。圓括號包括您想要捕捉的所有內容。你可以有多組圓括號。 – Blender
@BrainLikeADullPencil:這是一個快速演示。它應該是有幫助的:http://jsfiddle.net/KeHdU/5/ – Blender