首页 > 解决方案 > JavaScript - 替换正则表达式模式的第 n 个索引

问题描述

假设我在 Javascript 中有一个正则表达式,我如何使用替换函数只替换正则表达式模式的第 n 个索引。

例如假设这是目标字符串:

var string = `if ($exampl123 == 'test13')
            $example = 'test.testeg.hi';
        
            if ($exampl123 == 'test23')
            $example = 'test.testeg.hi';`

以下表达式匹配字符串的“test.testeg.hi”部分(匹配该字符串可见的两个点)。

var deriveString = new RegExp (/test\.\w+\.hi';(?!.*test\.\w+\.hi';)/gm);

在这种情况下,我只想替换此字符串的最后一次出现。如果我使用该string.prototype.match函数,它会返回一个包含所有匹配项的数组,即['test.testeg.hi' , 'test.testeg.hi']

在这种情况下,我只想替换模式的第二次出现。

无论如何使用javascript替换功能来仅替换模式的最后一次出现?

允许某种方式访问​​要替换的匹配索引的东西?像这样的东西?

string = string.replace(deriveString[matchedArray.length - 1] , 'insert new text here')

标签: javascriptregexreplace

解决方案


然后,您应该从您的正则表达式中删除该g选项,并直接针对最终匹配。你可以(.*)在它前面加上一个贪心,然后在替换中再次重现那个(长)前缀——使用$1.

var string = `if ($exampl123 == 'test13')
            $example = 'test.testeg.hi';
        
            if ($exampl123 == 'test23')
            $example = 'test.testeg.hi';`


var regex = new RegExp (/(.*)test\.\w+\.hi/s);

console.log(string.replace(regex, "$1insert new text here"));


推荐阅读