2
votes

La regex de validation de branche de flux Git doit se terminer par une lettre

J'écris une regex pour valider les noms de branche. Fondamentalement, une branche peut commencer par une fonctionnalité, un correctif ou une version suivie d'une barre oblique. Ensuite, il doit y avoir des lettres ou des chiffres (au moins un), puis un séparateur, soit une barre oblique, un point ou une ligne suivie de quelques lettres ou chiffres supplémentaires, etc. Cependant, le nom de la branche ne peut pas se terminer par un séparateur.

C'est ce que j'ai proposé.

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

Cependant, le nom de la branche release / 0 code> ne correspond pas alors qu'il le devrait. Cependant, lorsque je supprime le dernier jeu de caractères, la branche feature / name_ correspondra.


0 commentaires

3 Réponses :


1
votes

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

serait-il ce dont vous avez besoin?


1 commentaires

J'ai modifié ma réponse pour l'adapter



3
votes

Dans votre exemple, ce qui se trouve après la barre oblique est de 1 caractère et votre modèle attend au moins 2 caractères en raison des 2 classes de caractères [a-z \ d] + .

Une option consiste à faire correspondre la classe de caractères en premier et à répéter plus de 0 fois un séparateur suivi de la classe de caractères.

 ^(features?|releases?|hotfix(es)?)\/[a-z\d]+([-/_.][a-z\d]+)*$
  • ^ Début de chaîne
  • (features? | releases? | hotfix (s)?) Correspond à l'une des options
  • \ / [a-z \ d] + Faire correspondre la barre oblique et 1+ fois ce qui est répertorié dans la classe de caractères
  • ([- / _.] [a-z \ d] +) * Répétez 0 fois un délimiteur et plus d'une fois la classe char
  • $ Fin de chaîne

Démo Regex

Si vous ne le faites pas ' t besoin des groupes de capture () Vous pouvez les rendre non capturants à la place (?:)


2 commentaires

Cela marche! (le ? après [- / _.] semble redondant cependant) mais je ne suis pas sûr de comprendre ce que vous voulez dire en utilisant à la place des groupes sans capture?


C'est correct si [- / _.] n'est pas facultatif. J'ai mis à jour la réponse. Si vous n'utilisez pas ce qui est capturé dans le groupe dans votre code ou outil, par exemple en utilisant une référence arrière à ce qui est capturé, vous pouvez les empêcher de capturer. Cette page pourrait par exemple être utile.



1
votes

Pour le moment, le truc après votre premier / est:

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

Ce qui signifie "au moins un alphanumérique suivi d'un séparateur" OU "au moins un alphanumérique (pas de séparateur) "puis un caractère alphanumérique. En d'autres termes, au moins deux caractères au total.

Si vous changez ce milieu + en * , je pense que vous obtiendrez ce que vous voulez:

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


0 commentaires