首页 > 解决方案 > 如何操作正则表达式命名的捕获组

问题描述

我正在尝试使用捕获组将数据替换为自身,并对其中的数字进行操作。这是要处理的文本:

firstGroup1
firstGroup33

我的目标是用自身 + 1 替换任意数量的组,例如:

firstGroup2
firstGroup34

这是当前显示两个不同捕获组的代码:

data = data.replace(/(firstGroup)([1])/gms, '$1 $2')

为了理解这个问题,这是一次失败的尝试做我想做的事:

data = data.replace(/(firstGroup)([1])/gms, '$1' + $2+1

如何在 nodeJS javascript 中执行这个数字加法?谢谢你!

示例 2:

文本:

.method public constructor <init>()V
    .locals 2

失败的代码:

data = data.replace(/(constructor \<init\>[(][)]V.............)(..)/gms, (_, first, num) => first + (Number(num) + 1));

标签: node.js

解决方案


您在这里没有任何命名的捕获组,只有普通的捕获组 - 使用替换器函数替换第一个捕获的组,并与第二个捕获组连接到一个数字加 1:

const data = `firstGroup1
firstGroup33`;

const result = data.replace(
  /(firstGroup)(\d+)/g,
  (_, first, num) => first + (Number(num) + 1)
);
console.log(result);

因为您没有使用.来匹配模式中的任何地方的空格,所以不需要s修饰符,也没有使用^or $,因此也不需要m修饰符。

(一个命名的捕获组看起来像:

const str = 'foo bar';
const match = str.match(/foo (?<whatComesAfterFoo>\S+)/);
console.log(match.groups.whatComesAfterFoo);

)


推荐阅读