为了账号安全,请及时绑定邮箱和手机立即绑定

什么是非捕获组?(?:)做什么?

什么是非捕获组?(?:)做什么?

肥皂起泡泡 2019-05-23 13:23:30
什么是非捕获组?(?:)做什么?如何?:使用以及它有什么用?
查看完整描述

4 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

您可以使用捕获组来组织和解析表达式。非捕获组具有第一个好处,但没有第二个的开销。例如,您仍然可以说非捕获组是可选的。

假设你想匹配数字文本,但有些数字可以写成第1,第2,第3,第4 ......如果你想捕获数字部分而不是(可选)后缀你可以使用非捕获组。

([0-9]+)(?:st|nd|rd|th)?

这将匹配形式1,2,3 ......或者形式为1st,2nd,3rd,......但它只会捕获数字部分。


查看完整回答
反对 回复 2019-05-23
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

?: 当您想要对表达式进行分组时使用,但您不希望将其保存为字符串的匹配/捕获部分。

一个例子是匹配IP地址:

/(?:\d{1,3}\.){3}\d{1,3}/

请注意,我不关心保存前3个八位字节,但(?:...)分组允许我缩短正则表达式而不会产生捕获和存储匹配的开销。


查看完整回答
反对 回复 2019-05-23
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

它使组不捕获,这意味着该组匹配的子字符串不会包含在捕获列表中。ruby中的一个例子来说明差异:


"abc".match(/(.)(.)./).captures #=> ["a","b"]

"abc".match(/(?:.)(.)./).captures #=> ["b"]


查看完整回答
反对 回复 2019-05-23
  • 4 回答
  • 0 关注
  • 1064 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信