我想生成类似先生的输出。 X出生于01-01-2000 ,使用以下代码
var str="%(name)s born on %(date)s",
replace={name:'Mr.X',date:'01-01-2000'},
subject=["name","date"];
subject.map(function(data){
var regex = new RegExp("%("+data+")s", 'g');
str=str.replace(regex,replace[data])
})
console.log(str);
我无法用符号替换动态变量任何一个帮我找到更好的解决方案谢谢。
答案 0 :(得分:3)
只需转义在正则表达式中具有特殊含义的)
和var regex = new RegExp("%\\("+data+"\\)s", 'g');
,用于分组(匹配)。
var str="%(name)s born on %(date)s",
replace={name:'Mr.X',date:'01-01-2000'},
subject=["name","date"];
subject.map(function(data){
var regex = new RegExp("%\\("+data+"\\)s", 'g');
str=str.replace(regex,replace[data])
})
document.write(str);
运行代码:
.love

答案 1 :(得分:1)
一个问题是你的正则表达式不正确你必须逃避(和)。您也可以这样简化代码:
var str="%(name)s born on %(date)s",
replace={name:'Mr.X',date:'01-01-2000'}
for(var key in replace) {
var regex = new RegExp("%\\("+key+"\\)s", 'g');
str=str.replace(regex,replace[key])
}
console.log(str);
您已将名称和日期存储为键,以便不使用它们。无需使用" name"创建数组。和"约会" ...
输出:
Mr.X born on 01-01-2000
答案 2 :(得分:1)
str.replace
+回调应该可以解决问题:
var str="%(name)s born on %(date)s",
replace={name:'Mr.X',date:'01-01-2000'},
str = str.replace(/%\((\w+)\)s/g, function(_, id){
return replace[id];
});
document.write(str);