我试图找到所有以'%% 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/

10-12 03:20