replaceメソッドについて

replaceの第2引数に関数を持ってきたときの動作とか,正規表現のグルーピングによる後方参照とか。

String.prototype.escapeHTML = function(){
    return this.replace(/(&)|(")|(<)|(>)/g,function($0,$1,$2,$3,$4){
        if($1)
            return "&amp;";
        else if($2)
            return "&quot;";
        else if($3)
            return "&lt;";
        else
            return "&gt;";
    });
}


なんてものを書いてみたけど,escapeHTML の実装 3 パターン (ベンチマーク付き) - (new Hatena).blog()の2つめのがエレガントだなぁとおもった。