3

私は最近Javascript supplant、crockfordによる関数に出くわしました。関数は次のようになります-

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ステートメントの使用

4

1 に答える 1

4

Tomalakが言ったように、正規表現のスペースは些細なことではありません

  1. 正規表現は基本的に次のようなものと一致します{ ... }。つまり[^{}]、中括弧の内容は中括弧以外の何でもかまいません。つまり、コンテンツの *長さはゼロまたは任意の数にすることができます。括弧内の部分は括弧で囲まれた部分文字列の一致です

  2. この関数は辞書をとして渡し、上記の正規表現を使用してoを実行します。replace一致する場合は常に、のコールバック関数replaceが呼び出されます。aは一致した部分全体でありb、「ParenthesizedSubstringMatches」に対応する部分一致部分です。コールバック関数はb辞書でキーを探し、対応する値を返します

  3. returnステートメントは、のタイプrが文字列または数値の場合、return r;を意味します。それ以外の場合は戻りますa

Jared Farrishが提供するサンプルコードをチェックアウトできます。これは、一致と置換がどのように機能するかを非常に明確に示しています。

于 2012-06-09T07:46:12.973 に答える