String#replace

JavaScriptのString#replaceについてメモ。
String#replaceは第2引数に関数が使える。

例:単語をその文字数に置き換える。

"Time is money".replace(/\w+/g,function(str){
  return str.length.toString();
});

結果

4 2 5

正規表現中の()の数をnとすると、第2引数の関数にはn+3個の引数が渡される。

第1引数
マッチした文字列。RegExp.lastMatch
第2〜n+1引数
正規表現中の1〜n番目の括弧。RegExp.$1など
第n+2引数
マッチした文字列先頭のオフセット。RegExp.index
第n+3引数
元の文字列。RegExp.input

なんとややこしいこと…。第1引数以外は後に書いたRegExp.なんちゃらをつかうほうがいいかもしれない。
#replaceが正規表現のgフラグによって処理を変えるのはアレだなあ。