Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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 正则表达式第一个结果($1)替换为变量的属性_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式第一个结果($1)替换为变量的属性

Javascript 正则表达式第一个结果($1)替换为变量的属性,javascript,regex,Javascript,Regex,我试图在字符串中查找所有以“%%msgStrs.”开头、以“%”结尾的实例,并替换为实际变量msgStrs['which']。以下是一些示例代码: var msgStrs = { test: "1", test2: "2" } var msg = 'Test %%msgStrs.test%% test2 %%msgStrs.test2%%'; msg = msg.replace(/%%msgStrs\.(.*?)%%/g,msgStrs['$1']); 这是你的电话号码 正则

我试图在字符串中查找所有以“%%msgStrs.”开头、以“%”结尾的实例,并替换为实际变量msgStrs['which']。以下是一些示例代码:

var msgStrs = {
    test: "1",
    test2: "2"
}

var msg = 'Test %%msgStrs.test%% test2 %%msgStrs.test2%%';
msg = msg.replace(/%%msgStrs\.(.*?)%%/g,msgStrs['$1']);
这是你的电话号码

正则表达式似乎正常工作,$1返回正确的正则表达式,但它必须是错误的类型格式,因为msgStrs变量显示undefined。如果我将替换行更改为:

msg = msg.replace(/%%msgStrs\.(.*?)%%/g,"msgStrs['$1']");
这将显示$1的正确字符串


为什么它不拉msgStrs.test和msgStrs.test2?

您需要在回调中执行此操作:

var msgStrs={
测试:“1”,
测试2:“2”
}
var msg='Test%%msgStrs.Test%%test2%%msgStrs.test2%%';
msg=msg.replace(/%%msgStrs\.(.*)%%/g,函数(匹配,组1){
返回msgStrs[group1]?msgStrs[group1]:匹配;
});

console.log(msg);//=>测试1测试2 2你必须在回调中这样做。你能把参数重命名为对noob友好的东西吗,比如整型和匹配型,或者整型和子型?我一直认为
m
g
是不言自明的,可能只对我来说。在regexp的上下文中,m表示多,g表示全局,但可能这只是我。关键是,编码者的头脑中经常会出现单个字母。如果replace的回调没有跳过第一个参数(或者使它99%无用),那么它会简单得多。。。