Как заменить число внутри строки на + 1? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть строка типа "У нас есть foobar, который может обеспечить максимум 20 foo на бар." Я хотел бы заменить каждое вхождение "максимум" + номер любой длины с <number++. Вышеупомянутая строка приведет к:

«У нас есть foobar, который может обеспечить <21 фу на бар.» </p>

Я подумал о чем-то вроде:

string.replace("/maximum\sof\s\d+/ig", `<${$1++}`)

Но я не могу заставить его работать только за 1 $ обратных ссылок на всю группу захвата, а не на одно число. Я также борюсь с форматированием строк.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Вы можете использовать функцию обратного вызова и группу захвата

maximum\sof\s(\d+)
  • maximum\sof\s - совпадение maximum of
  • (\d+) - сопоставление одной или нескольких цифр (группа захвата 1 )

В обратном вызове мы можем использовать захваченную группу для замены на то, что нам нужно

let str = "We have a foobar which can provide a maximum of 20 foo per bar."
let replaced = str.replace(/maximum\sof\s(\d+)/ig, (_, g1) => '<' + (+g1+1))

console.log(replaced)
0 голосов
/ 02 апреля 2020

Заменить можно использовать функцию:

let input = "We have a foobar which can provide a maximum of 20 foo per bar.";

console.log(
  input.replace(/(?:\ba )?maximum of ([0-9]+)\b/, function (all, max) {
    return "<" + (max / 1 + 1);
  })
);

Это соответствует /(?:\ba )?maximum of ([0-9]+)\b/ (с необязательным начальным переносом слов и a ), а затем запускает функцию для результатов: полное совпадение (который мы не используем), а затем номер. Затем мы можем соединить этот сегмент с пересмотренным номером. Я делю на единицу, чтобы гарантировать, что max рассматривается как число (иначе это будет строка, таким образом, конкатенация к 201 вместо 21).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...