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

Regex first result ($1) replacement as property of variable

本文关键字:替换 变量 属性 第一个 结果 正则表达式      更新时间:2023-09-26

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

var msgStrs = {
    test: "1",
    test2: "2"
}
var msg = 'Test %%msgStrs.test%% test2 %%msgStrs.test2%%';
msg = msg.replace(/%%msgStrs'.(.*?)%%/g,msgStrs['$1']);

这是小提琴。

正则表达式似乎正在工作,$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;)。