我正在尝试查找以' %% msgStrs开头的所有实例。'并以' %%'结尾在一个字符串中,并替换为实际变量msgStrs ['无论什么']。以下是一些示例代码:
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?
答案 0 :(得分:1)
您需要在回调中执行此操作:
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;
)。