【发布时间】:2018-11-30 00:30:10
【问题描述】:
我正在尝试让一个正则表达式字符串正常工作,我已经玩了几天,似乎碰到了可爱的 fu 墙。
我需要一种方法来阻止正则表达式在 @username 之后匹配
我的正则表达式字符串看起来像这样(app plex) ?(?:@(.*)|)
假设输入是app plex @zycore look at this,输出将是:
Match 1
Full match 0-16 `app plex @zycore`
Group 1. n/a `app plex`
Group 2. n/a `zycore look at this`
我想要做的是拥有它,所以只有 zycore 在第 2 组中,而不是它后面的文本,(@ 符号被删除,因为它在代码中不需要,但在运行它的应用程序中需要它),它还需要使用 app plex 作为输入。
我尝试了多种变体,但似乎没有任何效果,我正在使用 regex101.com 来测试字符串。任何帮助,将不胜感激。
我试过了
(app plex) ?(?:@(.*)|)
(app plex) ?(?:@(.*)|)[\s]
(app plex) ?(?:@(.*)[\s]|)
【问题讨论】:
-
将
.替换为\S,参见(app plex) ?(?:@(\S*))?。为确保至少匹配 1 个字符,请将*替换为+。 -
谢谢你这适用于@username 之后的所有文本,但是它不再将 app plex 作为单个命令拾取,组 1 现在不匹配组 2 拾取 zycore 而没有其他内容(想要的效果)
-
我在评论中编辑了解决方案,抱歉。我发布了更新的解决方案作为答案。
标签: javascript regex hubot