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

jor*_*tor 2 javascript regex string replace

假设我有这个字符串:

<i id="1"></i><i id="2"></i><i id="3"></i>
Run Code Online (Sandbox Code Playgroud)

和这个对象:

{
  "1": "Red",
  "2": "Green",
  "3": "Blue"
}
Run Code Online (Sandbox Code Playgroud)

然后我想获取这个字符串:

<i color="Red"></i><i color="Green"></i><i color="Blue"></i>
Run Code Online (Sandbox Code Playgroud)

可以通过正则表达式替换来实现吗?

我试过这个:

var stringIwant = stringIhave.replace(/id="(\d)"/g, 'color="' + myObject["$1"] + '"')
Run Code Online (Sandbox Code Playgroud)

但它尝试读取对象的属性“$1”,但该属性不存在。我还尝试删除 1 美元左右的引号:

var stringIwant = stringIhave.replace(/id="(\d)"/g, 'color="' + myObject[$1] + '"')
Run Code Online (Sandbox Code Playgroud)

但我得到了ReferenceError: $1 is not defined

我尝试了更多的事情,但没有什么值得一提的。

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

Fra*_*erZ 5

您可以通过回调来做到这一点:

const stringIhave = `<i id="1"></i><i id="2"></i><i id="3"></i>`;

const obj = {
  "1": "Red",
  "2": "Green",
  "3": "Blue"
};

const stringIwant = stringIhave.replace(/id="(\d)"/g, (mat, grp) => `color="${obj[grp]}"`
);

console.log(stringIwant);
Run Code Online (Sandbox Code Playgroud)