我想解析一个包含单词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/

10-14 14:22