我正在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+)


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

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

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

最佳答案

您可以使用

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


请参见regex demo

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

细节:


new--匹配强制性new-
(?:.*?(rooms-\d+))?-可选序列(1个或0个出现,贪婪匹配,即正则表达式引擎将尝试匹配组的模式):


.*?-除换行符以外的任何0+字符都应尽可能少(即,
延迟匹配,将跳过该模式,然后先尝试后续模式,
并且仅在后续模式失败后才展开)
(rooms-\d+)-组1:rooms-和1个以上的数字(现在,它不是可选的,必须匹配,否则整个非捕获组将匹配一个空字符串)

.*?-除换行符以外的任何0+个字符都尽可能少
(area-\d+)-组2:area-和1个以上的数字。

关于javascript - 正则表达式-查找所有可选的组出现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44786404/

10-13 09:11