4

自己啓発にふさわしく、私はセニョール・クロックフォードのTGPを読んでいます(そして読み直しています)。しかし、私は彼の非実体化方法の真ん中の部分を理解することはできません。

...
return this.replace(...,
    function (a, b) {
       var r = ...
    }
);

私はそれを理解していると思います:

  1. this.replaceには、検索値としての正規表現と置換値を生成する関数の2つの引数が渡されます。
  2. bは、エンティティオブジェクトのプロパティにアクセスするために使用されます。
  3. リターン? r : a;ビットは、テキストをそのまま返すか、エンティティ内の適切なプロパティの値を返すかを決定します。

私がまったく得られないのは、aとbが引数としてにどのように提供されるかfunction (a, b)です。この関数を何と呼んでいますか?(私はすべてが自己実行的であることを知っていますが、それは私にとってそれを本当に明確にしません。私はこの関数がどのように呼び出されているのか尋ねていると思いますか?)

誰かがこれに似たブローバイブロー分析を行うことに興味があれば、私はそれを本当に感謝します、そして他の人もそうかもしれないと思います。

便宜上、コードは次のとおりです。

String.method('deentityify', function ( ) {
    var entity = {
        quot: '"',
        lt: '<',
        gt: '>'
    };

    return function () {
        return this.replace(
            /&([^&;]+);/g,
            function (a, b) {
                var r = entity[b];
                return typeof r === 'string' ? r : a;
            }
        );
    };
}()); 
4

2 に答える 2

5

aは数値オフセットではなく、一致した部分文字列です。

b(この場合) は最初のグループ化です。つまり、一致から周囲の&and を差し引いたもの;です。

このメソッドは、エンティティが存在すること、およびそれが文字列であることを確認します。そうであれば、それが置換値です。それ以外の場合は、元の値から&andを引いたものに置き換えられます。;

于 2012-05-14T11:52:24.663 に答える
5

関数は、2 番目のreplaceパラメーターとして関数を取ることができます。

この関数は、検索対象の正規表現のグループ数に応じたシグネチャを使用して、一致するたびに呼び出されます。正規表現にキャプチャ グループが含まれていない場合はa、一致した部分文字列、文字b列全体の数値オフセットになります。詳細については、MDN ドキュメントを参照してください。

于 2012-05-13T10:31:46.737 に答える