需要了解为什么regex没有替换所有匹配项

Need to understand why the regex is not replacing all matches

本文关键字:替换 了解 为什么 regex      更新时间:2023-09-26

我正试图弄清楚下面的正则表达式,以及它为什么会给我带来这样的结果。

我有以下javascript:

let result = '7979797'.replace(/797/g,'77');

我本以为结果的值是7777,但结果却是77977。

我希望有人能解释为什么我得到77977的值,以及我需要对正则表达式进行什么更改才能替换所有模式为797到77的字符串。

当正则表达式用77替换第一个797时,它不会重新扫描已替换的材质(77),因此它会看到9,然后是797,从而得到结果。

作为替代方案,我们可以使用下面的代码来实现所需的效果。

var input = '7979797';
var reg = /797/;
while(reg.test(input)){
    input = input.replace(reg,'77')
}
console.log(input)