replaceって引数にfunction使えるんだ。

小飼弾 404 Title Not Found - #2 プログラマーの三大美徳その2「短気」:ITproより

function fill_form(e){
  var t = document.getElementById('template').value;
  e.innerHTML = t.replace(/%([a-z][a-z0-9]+)%/g, function(m0,m1){
     return document.getElementById(m1).value || m1;
  });
}

ほーこれは使えそうだ。
replaceの第2引数に無名関数を指定して変換する値を動的に変えられるんですね。