首页 > 解决方案 > 我无法与捕获组匹配

问题描述

我想每行交换两个匹配项。PAG30079XZ例如,在下面的示例中,我想交换2213

AL/PAG31503XZ/ESB/2351/ESB/ABCD/
AR/PAG30079XZ/ESB/2213/ESB/ABCD
BL/PMC16410R7/ESB/1798/ESB/ABCD/
BR/PMC27936XZ/ESB/2444/ESB/ABCD
CL/PMC27377XZ/ESB/2563/ESB/ABCD/ 

我希望将所需的值放在捕获组中可以解决问题,但这不起作用。

所以我尝试了以下方法:

/(PAG30079XZ)(2213)/g

交换部分将是

$1$2

正则表达式 101 示例

标签: javascriptregex

解决方案


我想,您的任务更笼统,不限于单行和单对字符串。

在源数据中的第 2 行的情况下,您实际上希望在字符 之间交换每行的第二个第四个“段”,并且./PAG30079XZ2213

如果我是对的,请在每个段/之间使用捕获组。正如我从您的数据中看到的,所有段都包含字母和数字,因此为简单起见,每个组都可以是\w+(非空的单词字符序列)。\w实际上也匹配_,但我认为没关系。

例外是第 4 段,只包含数字,所以这个组可以是 \d+.

所以整个正则表达式应该是:

^(\w+)\/(\w+)\/(\w+)\/(\d+)

(注意^- 行锚和引号的开头/)和替换字符串应该是:

$1/$4/$3/$2

(注意$2$4交换)。

您还应该使用g选项来执行全局替换并 m匹配行首^

有关工作示例,请参阅https://regex101.com/r/D3K837/1


推荐阅读