Я пытаюсь использовать группу захвата для замены данных на себя, а также манипуляции с числом в ней. Над этим текстом нужно работать:
firstGroup1
firstGroup33
Моя цель - заменить любое количество групп на себя + 1, чтобы получить, например:
firstGroup2
firstGroup34
В настоящее время это код для отображения двух разных групп захвата:
data = data.replace(/(firstGroup)([1])/gms, '$1 $2')
и это неудачная попытка сделать то, что я хочу, ради понимания вопроса:
data = data.replace(/(firstGroup)([1])/gms, '$1' + $2+1
Как я могу выполнить добавление этого числа в javascript nodeJS? Спасибо!
пример 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.info(result);Поскольку вы не используете . для сопоставления пробелов где-либо в шаблоне, модификатор s не нужен, а также вы не используете ^ или $, поэтому модификатор m также не нужен.
(Именованная группа захвата выглядит примерно так:
const str = 'foo bar';
const match = str.match(/foo (?<whatComesAfterFoo>\S+)/);
console.info(match.groups.whatComesAfterFoo);)
Первый аргумент функции replacer — это полное совпадение, которое нам не нужно, поэтому я назвал его _. Второй аргумент — первая захваченная группа, третий аргумент — вторая захваченная группа.
Любая идея, почему пример, который я добавил (пример 2), не работает в вашем методе?
Вы заканчиваете узор на (..), но там только одна цифра. Может быть, вместо этого заменить на (\d+), чтобы соответствовать 1 или более цифрам? regex101.com/r/fc3hyM/1
Я пробовал, и у меня это работает и в regexr101, но почему-то не совпадает с этим в коде замены. Я думаю, это из-за разницы в линиях? Я потерян.
У меня работает jsfiddle.net/kfp7085o, все, что я сделал, это заменил (..) на (\d+)
Отличный ответ и очень информативный! :) Не могли бы вы объяснить часть _,first,num? почему мы используем _?