Git 流程分支验证正则表达式必须以字母结尾

Git flow branch validation regex must end with letter

我正在编写一个正则表达式来验证分支名称。基本上,分支可以以功能、修补程序或版本开头,后跟斜杠。之后必须是一些字母或数字(至少一个),然后是分隔符,可以是斜线、点或线,后跟更多字母或数字等。但是,分支名称不能以分隔符结尾。

这是我想出来的。

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

但是,分支名称 release/0 不匹配,而应该匹配。但是,当我删除最后一个字符集时,分支 feature/name_ 将匹配。

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

是你需要的吗?

在您的示例中,正斜杠后是 1 个字符,并且由于 2 个字符 classes [a-z\d]+,您的模式需要至少 2 个字符。

一个选项是首先匹配字符 class 并重复 0+ 次分隔符,然后是字符 class.

 ^(features?|releases?|hotfix(es)?)\/[a-z\d]+([-/_.][a-z\d]+)*$
  • ^ 字符串开头
  • (features?|releases?|hotfix(es)?) 匹配任意选项
  • \/[a-z\d]+ 匹配正斜杠和字符中所列内容的 1+ 倍 class
  • ([-/_.][a-z\d]+)* 重复 0+ 次分隔符和 1+ 次字符 class
  • $ 字符串结束

Regex demo

如果您不需要捕获组 () 您可以将它们改为非捕获 (?:)

现在,第一个 / 之后的内容是:

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

这意味着 "at least one alphanumeric followed by a separator" 或 "at least one alphanumeric (no separator)" 然后是字母数字。换句话说,总共至少有两个字符。

如果你把中间的 + 改成 *,我想你会得到你想要的:

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