文字列フォーマッタを実装したいと思います。私は"the quick, brown {0} jumps over the lazy {1}"
、基数の位置が波括弧付きの整数を置き換えるために使用されるパラメーターを渡す場所のような文字列を取るフォーマッターを使用しました。"the quick, brown {animal1} jumps over the lazy {animal2}"
animal1 と animal2 が変数であり、単純に評価されるようなことができるようになりたいと思っています。次のメソッドを実装しましたが、同じスコープを使用しないため、 eval が機能しないことに気付きました。
String.prototype.format = function() {
reg = new RegExp("{([^{}]+)}", "g");
var m;
var s = this;
while ((m = reg.exec(s)) !== null) {
s = s.replace(m[0], eval(m[1]));
}
return s;
};
- eval を使用せずにこれを行う方法はありますか (そうは思えません)。
- eval にクロージャを与えてスコープを取得する方法はありますか?
with(window)
とを試しwindow.eval()
ましたが、うまくいきませんでした。