当主题之前或之后存在关键字时的正则表达式匹配

时间:2014-04-08 16:25:09

标签: regex

我正在使用位于我们的开发人员聊天频道的机器人,并倾听关键字并发布与其相关的有用链接。

基本上,当用户说出类似&#34;我可以请<storyid>进行评论吗?&#34;它将获取相关的票证和gitlab合并请求链接。但是我希望它足够聪明,也可以触发像#34;我需要审查的<storyid>。&#34;同样。

我最接近的是

/review.*(US\d+)|(US\d+).*review/i

但这并不理想,因为这意味着我必须进行额外的检查以确定正则表达式上的匹配是否位于1或2位置。

我也试过

/(?:review)?.*(US\d+).*(?:review)?/i

但这实际上是/(US\d+)/i,我不想触发这种类型的回复。

2 个答案:

答案 0 :(得分:3)

您可以先确保review在字符串中,然后与US\d+匹配:

/^(?=.*review).*(US\d+)/i

如果由于积极的looahead没有review,上述匹配将失败。

如果有review,则会捕获US\d+

答案 1 :(得分:0)

我假设@Jerry的效率更高(可能值得测试),但这是另一种方式。这看起来支持review,然后US\d+US\d+展望review

(?<=review).*?(US\d+)|(US\d+).*?(?=review)

Example