繁体   English   中英

正则表达式-查找所有可选的组出现

[英]Regex - find all optional group occurrences

我正在JavaScript中创建正则表达式,以查找所有出现的组,所有可选的。 我发现了很多问题,但是没有答案对我有用。

我正在使用xregexp软件包,但是为了简单起见,我创建了在线演示。

输入:

new-rooms-3-area-50
new-foo-rooms-3-area-50-bar
new-qwe-more-rooms-3-asdads-anything-area-50-uiop
new-blah-more-area-50-else

要求的输出:

["rooms-3", "area-50"]
["rooms-3", "area-50"]
["rooms-3", "area-50"]
["area-50"]

我现在有了

new-(rooms-\d+)?.*(area-\d+)

正则表达式。 可能我不应该使用.* set,但是我不知道如何跳过一些不需要的部分。

在线演示: https : //regex101.com/r/QvmYN0/2/

您可以在regex101站点上派生并保存固定的解决方案。

您可以使用

new-(?:.*?(rooms-\d+))?.*?(area-\d+)
    ^^^^^^^^^^^^^^^^^^^

正则表达式演示

关键是使捕获组成为必需,但将其放入可选的非捕获组中。 最后一个*贪婪量词将转换为懒惰的量词,但这不是必需的。

详细资料

  • new-匹配强制性new-
  • (?:.*?(rooms-\\d+))? -可选的(1或0次出现,贪婪匹配,即正则表达式引擎将尝试匹配组的模式)序列:
    • .*? -除换行符以外的任何0+字符都应尽可能少(也就是说,惰性匹配,将跳过该模式并首先尝试后续模式,并且仅在后续模式失败后才扩展)
    • (rooms-\\d+) -第1组: rooms-和1+位数字(现在,它不是可选的,必须匹配,否则整个非捕获组将匹配一个空字符串)
  • .*? -除换行符以外的任何0+字符都尽可能少
  • (area-\\d+) -组2: area-和1+数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM