我想实现一个字符串格式化程序.我已经使用了格式化程序,它采用类似“快速,棕色{0}跳过惰性{1}”的字符串,在那里传入参数,其基数位置用于替换支撑整数.
我希望能够做一些更像“快速,棕色{animal1}跳过懒惰的{animal2}”的东西,其中animal1和animal2是变量而且只是被评估.我实现了以下方法,但后来意识到eval不起作用,因为它不使用相同的范围.
我希望能够做一些更像“快速,棕色{animal1}跳过懒惰的{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(),但是没有用.
解决方法
对于像var result =“这将使用我的{name}和{number}”格式化的用法.format({name:“TetsujinOni”,number:1234});
为什么不朝这个方向前进:
String.prototype.format = function(scope) { reg = new RegExp("{([^{}]+)}",scope[m[1]]); } return s; };