在下面的代码中,alert(a)
JavaScript 内部的替换函数会提醒匹配的字符串,在这种情况下,将是 {name} 和 {place}。
这如文档javascript docs所描述的那样工作,即 replace 方法中函数的第一个参数将是匹配的字符串。在下面的代码中,alert(b)
将提醒 'name' 和 'place' 但没有围绕它们的花括号。
这是为什么?它如何剥离'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(' - ');
};
下面的替换函数的函数(a,b)中的“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);