我最近遇到了crockford的Javascript supplant
函数。功能就像这样 -
if (!String.prototype.supplant) {
String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g,
function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
}
我需要了解这个函数的机制以及这个函数究竟是如何工作的。我遇到过很多解释,但都会通过引入使事情变得更糟的技术来使事情变得复杂。
试图寻找
1. regex
解释
2.函数(a,b)代码块的逻辑
3.使用该退货声明
答案 0 :(得分:3)
正则表达式基本匹配如下:{ ... }
。 [^{}]
表示花括号中的内容可以是除了卷曲的nraces之外的任何内容。 *
表示内容的长度可以是零或任何数字。括号内的部分是Parenthesized Substring Matches
该函数以o
的形式传递字典,并使用上面的正则表达式执行replace
。只要匹配,就会调用replace
的回调函数。 a
是整个匹配的部分,b
是与“带括号的子串匹配”对应的子匹配部分。回调函数查找b
作为字典中的键,并返回相应的值
return语句表示r
的类型是字符串还是数字,然后返回r
;否则返回a
你可以查看Jared Farrish提供的example code,它可以非常清楚地显示匹配和替换的工作方式。