我试图找到所有以'%% msgStrs'开头的实例。并以字符串中的'%%'结尾,并替换为该实际变量msgStrs ['whatever']。这是一些示例代码:
var msgStrs = {
test: "1",
test2: "2"
}
var msg = 'Test %%msgStrs.test%% test2 %%msgStrs.test2%%';
msg = msg.replace(/%%msgStrs\.(.*?)%%/g,msgStrs['$1']);
这是fiddle。
正则表达式似乎可以正常工作,并且$ 1返回正确的正则表达式,但是它必须采用错误的类型格式,因为msgStrs变量显示未定义。如果我将替换行更改为:
msg = msg.replace(/%%msgStrs\.(.*?)%%/g,"msgStrs['$1']");
这将显示$ 1的正确字符串。
为什么不拉msgStrs.test和msgStrs.test2?
最佳答案
您需要在回调中执行此操作:
var msgStrs = {
test: "1",
test2: "2"
}
var msg = 'Test %%msgStrs.test%% test2 %%msgStrs.test2%%';
msg = msg.replace(/%%msgStrs\.(.*?)%%/g, function(match, group1) {
return msgStrs[group1] ? msgStrs[group1] : match;
});
console.log(msg); // => Test 1 test2 2
其中
m
是整个匹配项,而g
是捕获的子匹配项。如果当前匹配的g
没有值,则返回整个匹配项(由于msgStrs[g] ? msgStrs[g] : m;
)。关于javascript - 正则表达式第一个结果($ 1)替换为变量的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35163405/