【发布时间】:2014-08-01 15:47:04
【问题描述】:
所以我有这个正则表达式,它是我想要的近似值:
^#!addr0=(.*?)(?=\/addr1=)\/addr1=(.*)\/coord0=(.*)\/coord1=(.*)
当我传递这个字符串时:
#!addr0=one/addr1=two/coord0=three/coord1=four
它正确捕获:one、two、three 和 four,请参阅here。
问题是我希望能够捕获以下字符串:
#!addr0=one/addr1=two
这应该捕获:one 和 two。
并且可选地,字符串也可以包含(尽管我可以保证addr0= 和addr1= 会在那里):
/coord0=three/coord1=four
据我所知,我需要一个可选的非捕获组,所以我想到了这个:
^#!addr0=(.*?)(?=\/addr1=)\/addr1=(.*)(?:\/coord0=(.*)\/coord1=(.*))?
这不起作用,因为这些组是:one 和 two/coord0=three/coord1=four。
我猜这很接近,因为当我不把问号放在最后时,我得到:one、two、three 和 four 但字符串只有 addr0= 和 @ 987654344@ 不匹配 (here)。
【问题讨论】:
-
也许检查非斜线?
^#!addr0=(.*?)(?=\/addr1=)\/addr1=([^/]*)(?:\/coord0=([^/]*)\/coord1=([^/]*))? -
@user887675 问题是我真的不能在第二个地址上有一个带有斜线的地址......
-
仅供参考,添加了解释。 :)
标签: javascript regex regex-group