我想解析一个包含单词Commits
(不区分大小写)的行,后接一个冒号,一个可能的空格以及两个提交哈希(由三个点分隔)或降价链接中包含的相同行。
例如,以下几行:
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:
之后的值,如果:它是由三个点分隔的两个提交哈希:
56af25a...d3fead4
同样的事情,但作为markdown链接文本:
[56af25a...d3fead4](anything in here)
如果之前或之后发生任何事情,它都将失败。
因此,通常以下字符串是错误的:
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+\)))$
只需尝试一下即可。
https://regex101.com/r/eS7gD7/9
关于javascript - 用于git commit(SHA1)的正则表达式,而不是markdown链接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28871141/