gpt4 book ai didi

javascript - 带或不带非捕获组的可选正则表达式字符串/模式部分

转载 作者:太空宇宙 更新时间:2023-11-04 15:45:59 24 4
gpt4 key购买 nike

这就是我正在尝试做的事情: /image/Xj1CR.png

只需采用包含 3 个组的 URL,$1 不太重要,$2 和 $3 是,但 $2 是完全可选的,包括(显然)存在相应的反斜杠,这就是我试图使其可选的全部。我知道它可以/应该吗?属于非上限组,但必须如此吗?我现在看到的足够多似乎表明它不一定是这样。如果可能的话,我真的很希望有人解释一下,这样我就可以尝试完全理解它,而不是像有些人来这里寻求那样,只是将一个可能的工作答案交给我来简单地复制。

这是我尝试过的正则表达式字符串,最多当前仅匹配带有可选存在的第二个 URL 字符串:

^https:\/\/([a-z]{0,2})\.?blah\.com(?:\/)(.*)\/required\/B([A-Z0-9]{9}).*
^https:\/\/([a-z]{0,2})\.?blah\.com(\/)?(.*)\/required\/B([A-Z0-9]{9}).*
^https:\/\/([a-z]{0,2})\.?blah\.com(?:\/)?(.*)?\/required\/B([A-Z0-9]{9}).*

这是我想要捕获组 2 和 3 的两个 URL,其中 1 和 2 是可选的,但 $2 是问题所在。我已经尝试了上面的所有字符串,但当可选不存在时,尚未使其与字符串匹配,我相信这一定是由于反斜杠所致?

https://blah.com/required/B7BG0Z0GU1A
https://blah.com/optional/required/B7BG0Z0GU1A

最佳答案

使模式的一部分成为可选就像添加 ? 一样简单,并且您的最后两次尝试都有效: https://regex101.com/r/RIKvYY/1

您的错误是您的测试错误 - 您使用的 ^字符串的开头匹配。您需要add the /m flag (multiline)使其与每行的开头匹配。这就是你的模式永远不会与第二行匹配的原因......

请注意,您允许使用两个斜杠(例如 //required)。您可以通过将第一个斜杠和可选部分加入同一个捕获组来解决它(当然,只要您使用 .* 仍然可以匹配多个斜杠):

https:\/\/([a-z]{0,2})\.?blah\.com(?:\/(.*))?\/required\/B([A-Z0-9]{9}).*

关于javascript - 带或不带非捕获组的可选正则表达式字符串/模式部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43568873/

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