我现在有
一个对象 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));});
在线等答案
javascript 字符替换,eval作用域,angularjs 替换原理
答案:1 悬赏:80 手机版
解决时间 2021-02-05 01:19
- 提问者网友:像風在裏
- 2021-02-04 18:17
最佳答案
- 五星知识达人网友:蓝房子
- 2021-02-04 18:36
嗯,可以得,把变量的作用域由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语法要求,‘错误的值’的引号要用半角的。
替换的时候,正则表达式捕获的分组也是会传递给替换函数得。
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语法要求,‘错误的值’的引号要用半角的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯