ローカル変数も展開したい!

弾さんのとこで、JavaScriptでテキスト内の変数展開をやる方法がでてる。

テキスト内の変数展開はいつも欲しいと思う。+で文字列を連結するのうざい!というわけで作ってみました。

function interpolate(str){
    return str.replace(/#\{([^\}]+)\}/g, function(m0,m1){
        var v = '';
        try{
            v = eval(m1);
        }catch(e){
            v = e
        }
        return v;
    });
}
http://blog.livedoor.jp/dankogai/archives/50766443.html

でも、

先生、これじゃローカル変数が展開できません!

なので、こんな感じでいかがでしょう?

function interpolate(str) {
  return "\""+ str.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/#{(.*?)}/g, "\"+($1)+\"")  +"\"";
}

使い方はこう

var today = new Date();
alert(eval(interpolate("こんにちは。現在は#{today.toLocaleString()}です。")));

interpolate関数は変数や式の埋め込まれたテキストを+を使う文字列連結のスクリプトするだけにして、呼び元でevalすればローカル変数も展開可能になるというわけです。
evalが外側にある分、ちょっと不恰好ですがその辺はガマンしてくださいw