Javascript 当我们试图替换为匹配项本身时,使用exec查找多个匹配项失败

Javascript 当我们试图替换为匹配项本身时,使用exec查找多个匹配项失败,javascript,Javascript,我想将序列ab替换为红色ab。这一例子取自。我面临的问题是,当我使用${myArray[0]}作为替换时,它会失败,而当我使用“XX”作为替换时,它会工作。有人知道为什么它不起作用吗?欢迎提出任何其他建议。提前谢谢大家 为社区提供一些额外的帮助:给出的答案与社区有关。在那里,user166390建议$&而不是$0。然后它工作得很好 <div id="Demonstration"></div> <script> // INPUT // ab

我想将序列ab替换为红色ab。这一例子取自。我面临的问题是,当我使用${myArray[0]}作为替换时,它会失败,而当我使用“XX”作为替换时,它会工作。有人知道为什么它不起作用吗?欢迎提出任何其他建议。提前谢谢大家

为社区提供一些额外的帮助:给出的答案与社区有关。在那里,user166390建议$&而不是$0。然后它工作得很好

<div id="Demonstration"></div>

<script>
// INPUT
// abbcdefabh
// WANTED OUTPUT
// XXcdefXXh

    let myRe = /ab*/g;
    let str = 'abbcdefabh';
    let myArray;
    while ((myArray = myRe.exec(str)) !== null) {
// IT WORKS !!!
        str = str.replace(`${myArray[0]}`, "XX");
// IT DOES NOT WORK !!!
        str = str.replace(`${myArray[0]}`, `<span style = "color:red;">${myArray[0]}</span>`);
    }
    document.getElementById('Demonstration').innerHTML = str;
</script>

//输入
//abbcdefabh
//想要的产出
//XXcdefXXh
设myRe=/ab*/g;
设str='abbcdefabh';
让我的数组;
while((myArray=myRe.exec(str))!==null){
//它工作!!!
str=str.replace(`${myArray[0]}`,'XX”);
//它不工作!!!
str=str.replace(`${myArray[0]}`、`${myArray[0]}`);
}
document.getElementById('演示').innerHTML=str;
我面临的问题是,当我使用
${myArray[0]}
作为替换时,它失败了

这是因为您在搜索字符串时正在更改该字符串。您将保留
ab*
引用,由于它们的位置发生了变化,搜索将继续匹配它们,字符串将永远增长。尝试使用循环中的断点进行调试,并观察
str
myRe.lastIndex
/
myArray.index
表达式

我想专门使用
exec()
进行尝试

不要。此作业的正确工具是将替换为,替换为:

…innerHTML=str.replace(myRe,$0');

“我想用exec()函数运行它”-但为什么?这绝对是错误的做法。如果您真的想这样做,您需要使用索引和长度的字符串操作来替换,而不是使用
replace
。更改
str
后,您需要手动调整
myRe.lastIndex
。只需编写
innerHTML=str.replace(myRe,$0')并完成。没有
exec
,没有循环。你明白为什么它不工作吗?亲爱的Bergi,非常感谢你的时间和兴趣。虽然我不太清楚,但你的关键词是我需要调整myRe.lastIndex。另一方面,在您提出的解决方案中,不清楚“0美元”是什么。我也会调查一下。但我想建议的是,把你的意见作为一个答案,以便对它投积极的票,并让你的建议对社区有用。虽然我不完全理解,但答案是值得投票表决,并增加价值。不做那件事是卑鄙的。无论如何,再次非常感谢你。我没有回答你,因为你明确要求“请不要提出其他方式来做这件事”:-)你能澄清一下你的要求吗?
….innerHTML = str.replace(myRe, '<span style = "color:red;">$0</span>');