在下面的代码中,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