正则表达式为Git提交消息

时间:2015-04-22 17:44:35

标签: ruby regex git githooks git-commit

我正在尝试使用正则表达式来强制执行Git提交消息以匹配某种格式。我一直在敲击键盘修改我的半工作版本,但我无法让它完全按照我的意愿工作。这就是我现在所拥有的:

/^([a-z]{2,4}-[\d]{2,5}[, \n]{1,2})+\n{1}^[\w\n\s\*\-\.\:\'\,]+/i

以下是我要强制执行的文字:

AB-1432, ABC-435, ABCD-42

Here is the multiline description, following a blank 
line after the Jira issue IDs
- Maybe bullet points, with either dashes
* Or asterisks

目前,它与之匹配,但如果在问题ID之后没有空行,并且之后有多个空行,它也会匹配。

无论如何要强制执行,还是我必须忍受它?

这也很丑陋,我确信有更简洁的方式来写出来。

感谢。

1 个答案:

答案 0 :(得分:1)

你的正则表达式允许\n作为所需换行符之后的可能字符之一,这就是为什么它在有多个时匹配的原因。

这是一个清理过的正则表达式:

/^([a-z]{2,4}-\d{2,5}(?=[, \n]),? ?\n?)+^\n([-\w\s*.:',]+\n)+/i

注意:

  • 这需要在下一个换行符前至少有一个[-\w\s*.:',]字符。
  • 我将问题ID更改为按顺序包含一个可能的逗号,空格和换行符(最多一个)。你能用前瞻吗?如果是,我添加了(?=[, \n])以确保问题ID后面至少跟有其中一个字符。
  • 另请注意,许多角色不需要在角色类中进行转义。