如何在一个可选的非捕获组中创建两个捕获组
How to make an two capturing groups inside a optional non capturing group.
所以我有这个正则表达式它是我想要的近似:
^#!addr0=(.*?)(?='/addr1=)'/addr1=(.*)'/coord0=(.*)'/coord1=(.*)
当我传递这个字符串时:
#!addr0=one/addr1=two/coord0=three/coord1=four
正确捕获:one
, two
, three
和four
,见这里。
问题是我希望能够捕获以下字符串:
#!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=
和addr1=
的字符串不匹配(这里)。
听起来你在找这个:
^#!addr0=(.*?)'/addr1=([^/]*)(?:'/coord0=(.*)'/coord1=(.*))?
在演示中,请参见右下角窗格中的捕获组。
- 你的原始的一个问题是,前瞻性
(?='/addr1=)
是多余的,因为你总是匹配/address1
- 对于组2,我们使用否定的字符类
[^/]*
,而不是懒惰贪婪的.*?
。为什么?因为由于最后一部分是可选的,惰性.*?
将被允许过早放弃。 - 最终部分进入非捕获组
(?:
,为可选。
相关文章:
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- sailsjs在创建两个模型时的错误处理
- 如何使用角度两个绑定来动态创建的剑道网格
- Meteor:如何使用空格键创建包含两个集合数据的树列表
- 查找与通过两次调用地理编码创建的两个 latlng 对象的距离
- 在jQuery中创建两个图像之间的行
- 如何同时创建两个Onload函数
- 创建选项卡,每个选项卡有两个文本区域
- 在JSON中创建一个数据对(不是字典,而是两个独立的数据)
- 谷歌脚本创建了两个电子表格,而不是一个
- 如何在同一个网页上创建两个连接列表
- 使用我在模拟器中创建的Canvas签名板,它运行良好,但在android设备中,两个签名板即将推出
- javascript基对象,用不同的方法创建另外两个对象
- 通过比较另外两个json对象来创建json对象
- 画布创建两个单独的动画瀑布对象
- 从两个单独的函数创建 JQuery 悬停
- 如何从 的 id 获取两个变量并创建 ajax 查询
- 如何匹配两个对象之间的值并使用特定值创建新对象
- 我可以添加两个变量来在 JavaScript 中创建一个变量名称吗?
- 如何创建两个选择列表并只允许一个选择