Javascript 正则表达式第一个结果($1)替换为变量的属性
我试图在字符串中查找所有以“%%msgStrs.”开头、以“%”结尾的实例,并替换为实际变量msgStrs['which']。以下是一些示例代码: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']); 这是你的电话号码 正则
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%无用),那么它会简单得多。。。