извлечение текста внутри скобок и текста снаружи с помощью регулярных выражений - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь извлечь текст внутри скобок, но также и текст снаружи, до следующей открывающей скобки, но не обязательно.

Это регулярное выражение, которое я пробовал:

/\[(?<colors>.+)\](?<text>.+?)(?=\[)/gm

А это текст

[F:White,B:Yellow]This is some text[F:Green]more text here
[F:White,B:Yellow]This is a anothr text

Без позитивного взгляда (?=\[) обе группы захвата ведут себя неправильно.

regex101

1 Ответ

0 голосов
/ 13 января 2019

Вы можете использовать шаблон [^][]+ ( класс отрицательных символов ) для сопоставления 1 или более символов, отличных от [ и ]:

\[(?<colors>[^][]+)](?<text>[^][]+)

См. Демоверсию regex . Обратите внимание, что в демонстрационной версии я добавил \n к классам символов с отрицанием, поскольку тест выполняется на одной многострочной строке, если вы проверяете несколько отдельных автономных строк, вам это не нужно.

В некоторых движках регулярных выражений вы должны экранировать [ или ] или оба внутри класса символов, как в Java, Ruby или Swift / Objective-C (библиотека Boost), поэтому используйте

\[(?<colors>[^\]\[]+)](?<text>[^\]\[]+)

Если группа text может быть пустой, замените (?<text>[^\]\[]+) на (?<text>[^\]\[]*), * будет соответствовать 0 или более вхождениям.

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