gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:13:38 26 4
gpt4 key购买 nike

我正在用 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 站点 fork 并保存固定的解决方案。

最佳答案

你可以使用

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com