【问题标题】:How to grab the rest of the string too in the regex matches?如何在正则表达式匹配中也获取字符串的其余部分?
【发布时间】:2019-10-18 07:57:46
【问题描述】:

我有以下字符串:

this is a test string user:testuser,anotheruser hashtag:peach,phone,milk site:youtube.com,twitter.com flair:????bobby????

目前,正则表达式 ([^:\s]+):([^:\s]+) 匹配所有中间有冒号的过滤器(用户、主题标签、站点、风格)。我怎样才能将剩余的"this is a test string" 部分作为另一场比赛?

演示:

https://regex101.com/r/L0T2GJ/11

【问题讨论】:

  • 可能是/^.*?(?=\s+[^:\s]+:)|([^:\s]+):([^:\s]+)/g,见demo
  • @WiktorStribiżew 似乎与初始字符串匹配,但随后与用户、主题标签和站点不匹配(组 1 是冒号前部分,组 2 是冒号后部分)就像我原来的查询一样。
  • @WiktorStribiżew 谢谢!完美运行。如果您将其发布为答案,我会接受。
  • 如果没有前瞻,您可以只附加一个替换:([^:\s]+):([^:\s]+)|^(?:[^:\s]+\s)*,缺点是第一个匹配项不会被修剪到右侧(空白)。

标签: regex regex-group


【解决方案1】:

您可以添加一个替代项,以尽可能少地匹配从字符串开头到第一个键后跟冒号的任何 0+ 个字符:

^.*?(?=\s+[^:\s]+:)|([^:\s]+):([^:\s]+)
^^^^^^^^^^^^^^^^^^^

见regex demo

详情

  • ^ - 字符串的开头 -.*? - 除换行符之外的任何 0+ 字符,尽可能少
  • (?=\s+[^:\s]+:) - 正向前瞻确保在当前位置的右侧有
    • \s+ - 1+ 个空格
    • [^:\s]+ - 除了: 和空格之外的 1+ 个字符
    • : - 冒号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2017-11-19
    • 2014-12-30
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    相关资源
    最近更新 更多