JavaScriptのString.replace()に関数を与えて高度な正規表現処理をする

String.replace(a, b)で、ab文字列であった場合は単純に置換を行う。
ここでa正規表現を与える事が可能なのはよく知られているが、実はbに関数を与えることができる。正規表現にマッチした結果を使って置換したい場合、関数を与える事でその処理が可能となる。

var str = '1983年度生まれが順調に大学を卒業すると2006年度就職。';
alert(str);
alert(str.replace(/([0-9]+)年度/g, function(all, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
    return (parseInt($1)+1).toString() + '年度';
}));

結果:

1983年度生まれが順調に大学を卒業すると2006年度就職。
1984年度生まれが順調に大学を卒業すると2007年度就職。

String.match()の後にRegExp.$1等が使えるが、String.replace()も同様に関数を使用したでないと値が設定されない。String.replace()の中でマッチした結果を使いたい場合は、上記のように関数を使う。
どうもリファレンスを見つけられないので、関数の引数とかは正確ではないかもしれないです。