什么是非捕获组?(?:)做什么?如何?:使用以及它有什么用?
4 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
您可以使用捕获组来组织和解析表达式。非捕获组具有第一个好处,但没有第二个的开销。例如,您仍然可以说非捕获组是可选的。
假设你想匹配数字文本,但有些数字可以写成第1,第2,第3,第4 ......如果你想捕获数字部分而不是(可选)后缀你可以使用非捕获组。
([0-9]+)(?:st|nd|rd|th)?
这将匹配形式1,2,3 ......或者形式为1st,2nd,3rd,......但它只会捕获数字部分。
慕田峪4524236
TA贡献1875条经验 获得超5个赞
?:
当您想要对表达式进行分组时使用,但您不希望将其保存为字符串的匹配/捕获部分。
一个例子是匹配IP地址:
/(?:\d{1,3}\.){3}\d{1,3}/
请注意,我不关心保存前3个八位字节,但(?:...)
分组允许我缩短正则表达式而不会产生捕获和存储匹配的开销。
明月笑刀无情
TA贡献1828条经验 获得超4个赞
它使组不捕获,这意味着该组匹配的子字符串不会包含在捕获列表中。ruby中的一个例子来说明差异:
"abc".match(/(.)(.)./).captures #=> ["a","b"]
"abc".match(/(?:.)(.)./).captures #=> ["b"]
- 4 回答
- 0 关注
- 1064 浏览
添加回答
举报
0/150
提交
取消