文字列リテラル展開
String#replaceの第二引数に関数を入れると加工して返せる
string.replace(reg, function replacer(str, p1, p2, p3....., offset, s) { });
str: regにマッチした部分文字列
p1, p2, p3........: strがRexExpオブジェクトの場合の()のマッチ結果
offset: マッチしたオフセット位置
s: 文字列自身
文字列リテラルに使う
function template(reg, str, data) { return str.replace(reg, function(str, p1) { return data[p1] || ""; }); } var perlStr = new RegExp("\\$\{(.*?)\}", "g"); var rubyStr = new RegExp("#\{(.*?)\}", "g"); var data = {}; data.test = "aaaaaaaaaaaaaa";
var r = template(perlStr, "test = ${test}", {test: "hoge"}); alert(r);//=> "test = hoge"
var r = template(rubyStr, "test = #{test}", {test: "hoge"}); alert(r);//=> "test = hoge"