git 提交 (SHA1) 的正则表达式是否在降价 link

Regex for git commit (SHA1) inside or not a markdown link

我想解析包含单词 Commits(不区分大小写)后跟冒号、可能的 space 以及由三个点分隔的两个提交散列或包含在一个中的相同内容的行降价 link.

例如,对于以下行:

commits:56af25a...d3fead4
Commits: [56af25a...d3fead4](https://github.com/Glimpse/Semantic-Release-Notes/compare/56af25a...d3fead4)

我想得到:

56af25a...d3fead4
[56af25a...d3fead4](https://github.com/Glimpse/Semantic-Release-Notes/compare/56af25a...d3fead4)

所以我测试了基本表达式 /^commits:[ ]{0,}(.*)/i,它可以工作,但我得到了任何东西 commits:,而不仅仅是两次提交。

我也测试了 /^commits:[ ]*([\[.*?\]\(]?\b[0-9a-f]{5,40}\b\.\.\.\b[0-9a-f]{5,40}\b[\)]?)/i 但我只得到了两个提交,例如:

56af25a...d3fead4
[56af25a...d3fead4

是否可以用一个正则表达式实现我想要的,还是用两个不同的正则表达式更好?

我只想要 commits: 之后的值 if :

前有后有则必失败。 所以通常以下字符串是错误的:

Commits: [56af25a...d3fead4](https://github.com/Glimpse/Semantic-Release-Notes/compare/56af25a...d3fead4) Commits:
Commits: test[56af25a...d3fead4](https://github.com/Glimpse/Semantic-Release-Notes/compare/56af25a...d3fead4)
Commits: test [56af25a...d3fead4](https://github.com/Glimpse/Semantic-Release-Notes/compare/56af25a...d3fead4)
^commits:[ ]{0,}(?:([a-z0-9A-Z]+\.{3}[a-z0-9A-Z]+)|(\[[a-z0-9A-Z]+\.{3}[a-z0-9A-Z]+\]\(https?:\/\/\S+\)))$

只需尝试 this.See 演示。

https://regex101.com/r/eS7gD7/9