Javascript 使用捕获的匹配项作为键,用正则表达式替换字符串

Javascript 使用捕获的匹配项作为键,用正则表达式替换字符串,javascript,regex,string,replace,Javascript,Regex,String,Replace,假设我有这个字符串: <i id="1"></i><i id="2"></i><i id="3"></i> <i color="Red"></i><i color="Green"></i><i color="Blue"></i> 然后我想获得这个字符串: <i id="1"></i><i id="2"></i

假设我有这个字符串:

<i id="1"></i><i id="2"></i><i id="3"></i>
<i color="Red"></i><i color="Green"></i><i color="Blue"></i>
然后我想获得这个字符串:

<i id="1"></i><i id="2"></i><i id="3"></i>
<i color="Red"></i><i color="Green"></i><i color="Blue"></i>
但它尝试读取对象的属性“$1”,该属性不存在。我还尝试删除1美元左右的报价:

var stringIwant = stringIhave.replace(/id="(\d)"/g, 'color="' + myObject[$1] + '"')
但我得到一个
ReferenceError:$1未定义

我尝试了更多的东西,但没有什么值得一提的


这就是为什么我想知道这是否可能。有什么帮助吗?

您可以通过回调来实现:

const stringIhave=`;
常量对象={
“1”:“红色”,
“2”:“绿色”,
“3”:“蓝色”
};
const stringIwant=stringIhave.replace(/id=“(\d)”/g,(mat,grp)=>`color=“${obj[grp]}”`
);

console.log(stringIwant)
您可以利用这样一个事实,
.replace()
可以传递一个函数作为第二个参数:

var stringIWant = stringIHave.replace(/id="(\d)"/g, function(wholeMatch, digits) {
  return "color='" + myObject[digits] + "'";
};

此函数的第一个参数将是整个匹配项。第二个和后续参数将是正则表达式中的
()
组(如果有)。返回的值用作整个匹配的替换值。当正则表达式有“g”标志时(如您的情况),该函数将在每次匹配迭代时调用。

请注意,“颜色”不是HTML
标记的标准属性,尽管您可以出于自己的目的使用它。别担心,这是我创建的一个示例,以暴露我的问题