如何使用具有变量值的特定前缀替换所有字符串

时间:2014-03-28 17:47:53

标签: javascript jquery regex

我想要做的是在" {{msgStr。"作为前缀并用变量替换它。例如:

var msgStr = {
    h1Text: 'test',
    pText: 'test2'
}

var string = '<h1>{{msgStr.h1Text}}</h1><p>{{msgStr.pText}}</p>';
var pattern = new RegExp("{{msgStr.(.+?)}}","g");
alert(string.replace(pattern, msgStr[$1]));

问题是msgStr [$ 1]返回undefined。我用同样的结果尝试了msgStr [&#34; $ 1&#34;]。如果我只是&#34; $ 1&#34;,它会输出h1Text和pText,这就是我想要使用的东西,如msgStr [&#34; h1Text&#34;]。

不确定我需要做些什么才能让它正常工作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:8)

String.prototype.replace使用callback as a second argument

str.replace(/{{msgStr\.(.+?)}}/g, function(_, c) {
    return msgStr[c];
});

答案 1 :(得分:0)

试试这个(只需传递function作为replace函数的第二个参数)

var msgStr = {
  h1Text: 'test',
  pText: 'test2'
}

var string = '<h1>{{msgStr.h1Text}}</h1><p>{{msgStr.pText}}</p>';
string.replace(/{{msgStr.(.+?)}}/g, function(substr, match){return msgStr[match]})

编辑我想我有点晚了,页面没有刷新,没有看到上面的答案:)