node.js - 如何操作正则表达式命名的捕获组
问题描述
我正在尝试使用捕获组将数据替换为自身,并对其中的数字进行操作。这是要处理的文本:
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));
解决方案
您在这里没有任何命名的捕获组,只有普通的捕获组 - 使用替换器函数替换第一个捕获的组,并与第二个捕获组连接到一个数字加 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);
)
推荐阅读
- c++ - 二叉搜索树 - 添加节点的复杂性
- bash - “检索 docker 检查”在 bash 脚本中至少需要 1 个参数
- php - 如何使用 laravel 8 护照创建和保护多重身份验证 api gurd?
- node.js - 我可以更改 Express 节点中的请求标头吗?
- javascript - Youtube.Search.list(..).getItems 返回一个字符串?如何轻松转换或过滤项目?
- go - 更新对象的一部分
- python - `TimeDistributed` 层应传递至少 3 个维度的 `input_shape`,收到:[None, 400]
- c# - 自动将 S3 存储桶设置为主机
- azure - 如何在 Azure DevOps 中显示重复移动到“下一个”冲刺的工作项
- macos - 更新 NSWindow 内容大小以适应 SwiftUI 视图