我正在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/