将变量传递给带有符号JavaScript的RegExp

时间:2015-07-23 14:51:54

标签: javascript regex

我想生成类似先生的输出。 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);

我无法用符号替换动态变量任何一个帮我找到更好的解决方案谢谢。

3 个答案:

答案 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);