javascript - 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'
)
解决方案
然后,您应该从您的正则表达式中删除该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"));
推荐阅读
- git - 'git log' 是否使用深度优先搜索遍历来显示提交?
- google-cloud-platform - Cloud Scheduler 不尊重我的超时设置(编辑:与 CloudRun 无关)
- c# - 确定 IIS vdir 中的主 DLL
- mime-types - 由 Quarkus 提供的带有错误 Content-Type 标头的 Wasm 文件
- solr - 在空的 Solr 核心上重新索引
- c# - 当我在 C# 中提交表单时程序崩溃
- c++ - 使用 Ultralight 将 JavaScript 值从 UI 发送到 C++ 程序
- php - JSON_decode 与 file_get_contents,为什么不工作?
- awk - 来自服务器的错误 (NotFound): 未找到 pod "$(kubectl"
- java - 尽管在类中声明了方法,但java说“找不到符号”