Регулярное выражение для сопоставления слов и чисел с повторяющимися последовательностями (FOO-123 / FOO-456 /...etc) - PullRequest
1 голос
/ 25 апреля 2020

https://regexr.com/539me

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

- [FOO-123] This is a change from one project
- [FOO-567 / FOO-890] This has two changes from one project
- [BAR-123 / BAZ-456 / BANG-1234 ] This has three changes from three different projects

Я был удовлетворен моим текущим регулярным выражением, которое у меня есть, но потом я начал тестировать его дальше, и он портится, когда я случайно набираю опечатки или добавляю символ, такой как A, из BAR в FOO, чтобы сделать FOA, или пропускаю /:

- [FOB-1234] hello 
- [BAG-1234] how
- [FOO-1234 FOO-5678] are
- [FOA-1234 / BARG-1234 / BZF-1234] you?

Как бы я получил это что вершина всегда хороша, но низ никогда не работает?

Регулярное выражение, которое я сейчас создал:

/-\s\[[(FOO|BAR|BAZ|BANG)-\d{\s}{/}{\s}+]*]\s.+/g

https://regexr.com/539me

1 Ответ

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

Вы можете сопоставить одну из альтернатив и использовать опционально повторяющуюся группу с добавлением пробела, переднего знака sh и пробела.

^-\s\[(?:FOO|BAR|BAZ|BANG)-\d+(?: / (?:FOO|BAR|BAZ|BANG)-\d+)*\] .+$

Это будет соответствовать

  • ^ Начало строки
  • \s\[ Соответствует символу пробела и [
  • (?:FOO|BAR|BAZ|BANG) Соответствует любой из альтернатив
  • -\d+ Соответствует - и 1+ цифры
  • (?: без захвата группы
    • / (?:FOO|BAR|BAZ|BANG)-\d+ совпадение / , 1 или альтернативы и - плюс 1+ цифры
  • )* Закрыть группу и повторить 0+ раз
  • \] .+ Совпадение ], пробел и 1+ вхождений любого символа, кроме новой строки.
  • $ Конец строки

Regex demo

Примечание для удаления [ и ] вокруг группы, иначе это сделает его классом символов.

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