3

我最近遇到了Javascript supplantcrockford 的功能。功能是这样的 -

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.function(a,b) 代码块的逻辑

3.那个return语句的使用

4

1 回答 1

4

正如托马拉克所说,正则表达式中的空格并非微不足道

  1. 正则表达式基本上匹配这样的内容:{ ... }. 这[^{}]意味着花括号中的内容可以是除了花括号之外的任何内容。这 *意味着内容的长度可以是零或任何数字。括号内的部分是带括号的子字符串匹配

  2. 该函数将字典传入 as o,并使用上面的正则表达式执行 a replace。只要有匹配,replace就会调用 的回调函数。a是整个匹配部分,b是与“Parenthesized Substring Matches”对应的子匹配部分。回调函数b在字典中查找作为键,并返回对应的值

  3. return 语句表示如果类型r是字符串或数字,则返回r;否则返回a

您可以查看 Jared Farrish 提供的示例代码,它非常清楚地显示了匹配和替换是如何工作的。

于 2012-06-09T07:46:12.973 回答