javascript 字符替换,eval作用域,angularjs 替换原理
我现在有一个对象vardata={a:"这个属性的值"};一个字符串varss="sssdfdf{{a}}sss{{1==2?a:‘错误的值’}}sss";想要得到“ss...
我现在有
一个对象 var data = {a:"这个属性的值"};
一个字符串 var ss = "sssdfdf{{a}}sss{{1==2 ? a : ‘错误的值’ }}sss";
想要得到“sssdfdf这个属性的值sss错误的值sss”。
就像angularjs的数据展示。
尝试过使用eval,但是要把data的属性全部赋给window才行,不合适,
ss.replace(/\{\{(.*?)\}\}/g,function(){ return eval(arguments[0].substr(2,arguments[0].length).substr(0,arguments[0].length-4));});
在线等答案 展开
一个对象 var data = {a:"这个属性的值"};
一个字符串 var ss = "sssdfdf{{a}}sss{{1==2 ? a : ‘错误的值’ }}sss";
想要得到“sssdfdf这个属性的值sss错误的值sss”。
就像angularjs的数据展示。
尝试过使用eval,但是要把data的属性全部赋给window才行,不合适,
ss.replace(/\{\{(.*?)\}\}/g,function(){ return eval(arguments[0].substr(2,arguments[0].length).substr(0,arguments[0].length-4));});
在线等答案 展开
1个回答
展开全部
嗯,可以得,把变量的作用域由window用with改成对象就行了。
替换的时候,正则表达式捕获的分组也是会传递给替换函数得。
var data={a:"这个属性的值"};
var ss="sssdfdf{{a}}sss{{1==2 ? a : '错误的值' }}sss";
var result=ss.replace(/\{\{(.*?)\}\}/g,function(find, group1){
with(data){
return eval(group1);
}
});
console.log(result);
注意这个要求字符串内的表达式符合js语法要求,‘错误的值’的引号要用半角的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询