Объедините несколько совпадений по нескольким строкам в одно совпадение - PullRequest
1 голос
/ 15 апреля 2020

Я хочу сопоставить непрерывный контент, охватывающий несколько строк, помеченных маркером >.
Пример:

Some text      <- is not matched
Another Text   <- also ignored
> This should be included
> And also this
> This as well
But not this   <- ignored

Совпадение должно возвращать только это (как полное совпадение или одиночное группа захвата):

This should be included
And also this
This as well

Мой текущий подход - это регулярное выражение (JavaScript):

/(?:(?<=^> ).+\n)+/gm

Он правильно захватывает нужный мне контент, но не объединяет три совпавших строки в одно совпадение (таким образом, вместо one ) получается три отдельных совпадения.

Почему он не группирует три не захватывающих группы совпадения в одно?
Можно ли даже выполнить sh эту задачу только с помощью JavaScript regex?

1 Ответ

1 голос
/ 15 апреля 2020

Используя ваш шаблон, вы получите 3 совпадения вместо 1 совпадения, потому что при переходе к следующей строке это утверждение (?<=^> ) неверно, поэтому двигатель будет двигаться вперед в поисках следующего возможного совпадения.

Один из вариантов получения результата - использовать шаблон, чтобы сначала получить все совпадения, а затем выполнить вторую замену для всех > частей.

^> .+(?:\r?\n>.*)*

Regex demo

const regex = /^> .+(?:\r?\n> .+)*/gm;
const str = `Some text
Another Text
> This should be included
> And also this
> This as well
But not this`;

let result = str.match(regex)[0].replace(/^> /gm, "");
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...