我想实现一个字符串格式化程序。我使用了格式化程序,它接受字符串,就像"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)
andwindow.eval()
,但是没有用。