我最近发现了 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.return语句的使用
最佳答案
正如 Tomalak 所说,正则表达式中的空格不是微不足道的
正则表达式基本上匹配如下内容:
{ ... }
。[^{}]
表示大括号中的内容可以是除大括号之外的任何内容。*
表示内容的长度可以是零或任何数字。括号里面的部分是Parenthesized Substring Matches该函数将字典作为
o
传递,并使用上面的正则表达式执行replace
。每当匹配时,将调用replace
的回调函数。a
是整个匹配部分,b
是“Parenthesized Substring Matches”对应的子匹配部分。回调函数在字典中查找b
作为键,并返回对应的值return 语句表示如果
r
的类型是字符串或数字,则返回r
;否则返回a
您可以查看 example code由 Jared Farrish 提供,它非常清楚地展示了匹配和替换是如何工作的。
关于Javascript 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959131/