文字列リテラル展開

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";

Perlみたいな文字列リテラル展開

var r = template(perlStr, "test = ${test}", {test: "hoge"});
alert(r);//=> "test = hoge"

Rubyみたいな文字列リテラル展開

var r = template(rubyStr, "test = #{test}", {test: "hoge"});
alert(r);//=> "test = hoge"