You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git提交消息正则表达式构建求助:匹配规则与捕获问题

Git提交消息正则表达式解决方案

完全可以实现你要的Git提交消息格式校验与内容提取需求,下面是调整后的正则表达式以及细节说明:

最终正则表达式

^(?<type>feat|fix|docs|style|refactor|perf|test|chore)(?:\((?<scope>.+)\))?: (?<subject>.{3,50})(?:\n\n(?<body>(?:(?!\n\n(?:BREAKING CHANGE:|Refs:)).)+))?(?:\n\nBREAKING CHANGE: (?<breaking>.+))?(?:\n\nRefs: (?<footer>.+))?$

(注:如果需要支持多行匹配且保留正则注释式换行,可添加/ms修饰符——m开启多行模式,s让.匹配换行符)

关键调整说明

  • 边界处理:用(?!\n\n(?:BREAKING CHANGE:|Refs:))负向预查实现核心需求——<body>会匹配到BREAKING CHANGE:或Refs:段落前,若两者都不存在则匹配到消息末尾。
  • 捕获优化:把原正则的\(.+\)改为\((?<scope>.+)\),精准捕获括号内的范围内容,避免贪婪匹配导致的错误。
  • 整体锚定:用^和$锚定整个提交消息,防止匹配片段内容;所有可选结构用非捕获组(?:...)包裹,确保仅捕获需要的命名字段。

匹配验证

针对你给出的三个合规示例,该正则能精准捕获对应字段:

  • 仅含主体的提交:捕获type=feat、scope=stuff、subject=add feature、body=Body text and stuff\nMultiline body
  • 带BREAKING CHANGE的提交:额外捕获breaking=Some breaking thing
  • 带Refs的提交:额外捕获footer=Closes issue #270

补充提示

如果需要限制<body>最少字符数,可把(.+)替换为(.{3,}),和你原需求里的“3个字符以上”要求对应。

内容的提问来源于stack exchange,提问作者Deeblock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:02:47