如何替换字符串中的标记?
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]);
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]);