【问题标题】:Stoping a Regex String after a certain point在某个点之后停止正则表达式字符串
【发布时间】: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


【解决方案1】:

你可以使用

(app plex) ?(?:@(\S*))?

regex demo

详情

  • (app plex) - 第 1 组:app plex 子字符串
  • ? - 可选空格
  • (?:@(\S*))? - 一个可选的非捕获组匹配 1 或 0 次出现
    • @ - 一个 @ 字符
    • (\S*) - 第 2 组:0+ 个非空白字符。

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多