仅当目标对象中存在替换时,如何替换字符串?
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'))
我从这个 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'))