Regex: Как использовать один и тот же тег для определения конца совпадения и начала другого совпадения - PullRequest
0 голосов
/ 04 декабря 2018

Я хотел бы сделать глобальное выражение регулярного выражения, которое захватывает текст в документе, такой как:

[ITEM]
   Text 1.
[ENDLIST]

Следующее будет захватывать текст «Группа захвата 1».

/\[\[ITEM\](.+)\[ITEM|ENDLIST\]/g

Однако, по мере роста списка, регулярное выражение не выполняется для:

[ITEM]
   Text 1.
[ITEM]
   Text 2 (fails to capture here, as well as all subsequent even cases).
[ITEM]
   Text 3.
[ENDLIST]

Это связано с тем, что в первом совпадении будет использоваться первый [ITEM] для начала матча, а второй [ITEM] для завершенияматч.Это предотвращает использование второго [ITEM] для начала второго матча.В приведенном выше случае текст 1 захвачен, текст 2 - нет, а текст 3 захвачен:

Как бы я написал регулярное выражение для работы с расширенным примером выше?Заранее спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

Просто используйте прогноз для тега [ITEM] или [ENDLIST] - он завершит текущую группу при поиске тега для следующей группы, не перемещая курсор вперед, что позволяет тегу также начинать следующую группу.

\[ITEM\](.*?)(?=\[(?:ITEM|ENDLIST)\])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...