如何替换字符串中的标记?

How can I replace tokens in string?

I have a json object

    const item = {
fooUrl : 'www.google.com',
fooDomain : 'www.yahoo.com'
}

和一个输入字符串 foo$ENV[fooDomain]bar。我想用 item.fooDomain 替换 $ENV[fooDomain] 并且类似地替换 accountsUrl, 我希望这种情况动态发生,这意味着即使添加了新的未知密钥,模式也应该找到并替换 $ENV[something] 值。

到目前为止我做了什么

console.log(str.replace(/(?:^|\s)$ENV[(\w*)](.*?)(?:\s|$)/g,item.accountsUrl // how to make this dynamic ?));

您可以只使用匹配和单个捕获组来获取与对象对应的 属性 名称。

请注意,您必须转义美元符号和开头的方括号。

正如@Wiktor Stribiżew 在评论中指出的那样,如果在对象中找不到第 1 组值,您可以使用 || m 到 return 匹配。

const item = {
  accountsUrl: 'www.google.com',
  accountsDomain: 'www.yahoo.com'
}
const regex = /$ENV\[(\w+)]/
let s = "foo$ENV[accountsDomain]bar";
s = s.replace(regex, (m, g1) => item[g1] || m);
console.log(s);

str.replace(/(?<=$ENV\[)[^\]]+/, match => item[match]);