Регулярное выражение валидации ветки Git должно заканчиваться буквой - PullRequest
1 голос
/ 26 апреля 2019

Я пишу регулярное выражение для проверки имен веток.По сути, ветвь может начинаться с функции, исправления или выпуска, за которым следует косая черта.После этого должны быть несколько букв или цифр (по крайней мере, один), а затем разделитель, косая черта, точка или строка, за которой следуют еще несколько букв или цифр и так далее.Однако имя ветви не может заканчиваться разделителем.

Это то, что я придумал.

^(features?|releases?|hotfix(es)?)\/([a-z\d]+[-/_.]?)+[a-z\d]$

Однако имя ветви release/0 не совпадает, хотя должно.Однако, когда я удалю последний набор символов, ветвь feature/name_ будет соответствовать.

Ответы [ 3 ]

1 голос
/ 26 апреля 2019

В вашем примере после косой черты 1 символ, и ваш шаблон ожидает не менее 2 символов из-за 2 классов символов [a-z\d]+.

Один из вариантов - сначала сопоставить класс символов и повторить 0+ раз разделитель, а затем класс символов.

 ^(features?|releases?|hotfix(es)?)\/[a-z\d]+([-/_.][a-z\d]+)*$
  • ^ Начало строки
  • (features?|releases?|hotfix(es)?) Соответствует любому из параметров
  • \/[a-z\d]+ Соответствует косой черте и в 1+ раз больше, чем указано в классе символов
  • ([-/_.][a-z\d]+)* Повторите 0+ раз разделитель и 1+ раз класс char
  • $ Конец строки

Regex demo

Если вам не нужны группы захвата () Вместо этого вы можете сделать так, чтобы они не захватывали (?:)

1 голос
/ 26 апреля 2019

Прямо сейчас, материал после вашего первого /:

([a-z\d]+[-/_.]?)+[a-z\d]$

Что означает «хотя бы один буквенно-цифровой символ, за которым следует разделитель« ИЛИ »хотя бы один буквенно-цифровой (без разделителя)», а затем буквенно-цифровой. Другими словами, всего не менее двух символов.

Если вы измените эту середину + на *, я думаю, вы получите то, что хотите:

([a-z\d]+[-/_.]?)*[a-z\d]$
1 голос
/ 26 апреля 2019

Будет

^(feature(s)?|release(s)?|hotfix(es)?)(\/[a-z\d]+)([-/_.][a-z\d]+)+$

Будет то, что вам нужно?

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