ローカル変数も展開したい!
弾さんのとこで、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