javascript string replaceの妙味


http://www.codebit.cn/javascript/javascript-replace.html

String.prototype.format = function()
{
    var args = arguments;
    return this.replace(/\{(\d+)\}/g,                
        function(m,i){
            return m+args[i];
        });
};

console.log("{0} is {1}".format("hello","world"));
hello is world
replaccementが関数である場合、各マッチするサブ文字列に対して、この関数を呼び出す時は以下のm+3つのパラメータがあり、ここでmはrgExpで取り込まれた左括弧の個数である。最初のパラメータはマッチするサブ文字列です。次のm個のパラメータは、検索中に取り込まれたすべての結果である。第m+2番目のパラメータは、strigObjにおいて整合して出現するオフセット量であり、第m+3番目のパラメータはstrigObjである。結果は、各マッチングしたサブ文字列を、関数呼び出しの対応する戻り値に置き換える文字列の値です。

function f2c(s) {
  var test = /(\d+(\.\d*)?)F\b/g;    //      。
  return(s.replace
    (test,
      function($0,$1,$2) { 
        return((($1-32) * 5/9) + "C");
      }
    )
  );
}
document.write(f2c("Water freezes at 32F and boils at 212F."));