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));});
在线等答案
展开
 我来答
xiangyuecn
推荐于2016-10-05 · TA获得超过336个赞
知道小有建树答主
回答量:408
采纳率:0%
帮助的人:307万
展开全部

嗯,可以得,把变量的作用域由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语法要求,‘错误的值’的引号要用半角的。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式