仅当目标对象中存在替换时,如何替换字符串?

How to replace string only if the replacement exists in the target object?

我从这个 中得到以下片段,此代码用 item 对象 accountsDomain: 'www.yahoo.com' 中的键替换字符串中的标记 $ENV[accountsDomain] 并且类似地 accountsUrl

如何 运行 有条件地替换,仅当 item[g1] 存在时才替换字符串,因为这些键是可选的

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);

你不能在替换中这样做,你必须在外面这样做。

const item = {
  accountsUrl: 'www.google.com',
  accountsDomain: 'www.yahoo.com'
}

function replaceItem(item, key) {
  const regex = /$ENV\[(\w+)]/
  let s = `foo$ENV[${key}]bar`;
  let [, match] = s.match(regex);
  return item[match] && s.replace(regex, (m, g1) => item[g1]);
}

console.log('result with existing key:', replaceItem(item, 'accountsDomain'))
console.log('result with un-existing key:', replaceItem(item, 'accDomain'))