Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何用变量值替换具有特定前缀的所有字符串_Javascript_Jquery_Regex - Fatal编程技术网

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

Javascript 如何用变量值替换具有特定前缀的所有字符串,javascript,jquery,regex,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

我试图做的是在一个以{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]返回未定义。我尝试了msgStr[$1]并得到了相同的结果。如果我只返回$1,它将输出h1Text和pText,这是我试图像msgStr[h1Text]一样使用的

不确定我需要做什么才能使其正常工作。如有任何帮助,将不胜感激。

用于String.prototype.replace:

用于String.prototype.replace:

请尝试将函数作为replace函数的第二个参数传入

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

试试这个,只是传入函数作为替换函数的第二个参数


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

不是JS用户,但是,查看了替换函数回调的参数规范。如果我想获得总字符串,我是否必须列出所有捕获组参数,例如:2个捕获组总匹配、p1、p2、偏移量、字符串?如果我只想要capture group 1相同的正则表达式,如果arg列表正好匹配,可以吗?p1?@sln回答您的第一个问题,否,对于这种情况,JavaScript有object,它可用于所有函数,因此要获取最后一个参数,您可以使用arguments[arguments.length-1]。关于第二个问题,是的,在JS中,您可以在函数定义以及函数调用中指定任意数量的参数。我明白了。如果我正确理解arguments对象,在您上面的回答中,作为示例,我可以使用函数{return msgStr[arguments[arguments.length-3]];}此列表中的变量是捕获组1和参数[arguments.length-4]]是捕获组0吗?我知道不应该这样做。谢谢你的帮助!不是JS用户,但是,查看了该规范以获取替换函数回调的参数。如果我想获得总字符串,我是否必须列出所有捕获组参数,例如:2个捕获组总匹配、p1、p2、偏移量、字符串?如果我只想ted capture group 1相同的正则表达式,如果arg列表正好匹配,是否可以,p1?@sln回答您的第一个问题,否,在这种情况下,JavaScript有object,可用于所有函数,因此要获取最后一个参数,可以使用参数[arguments.length-1]。关于第二个问题,是的,在JS中,您可以在函数定义以及函数调用中指定任意数量的参数。我明白了。如果我正确理解arguments对象,在您上面的回答中,作为示例,我可以使用函数{return msgStr[arguments[arguments.length-3]];}此列表中的变量是捕获组1,参数[arguments.length-4]]是捕获组0?我知道不应该这样做。感谢您的帮助!
str.replace(/{{msgStr\.(.+?)}}/g, function(_, c) {
    return msgStr[c];
});
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]})