猿问

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

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

如何?:使用以及它有什么用?



肥皂起泡泡
浏览 1071回答 4
4回答

茅侃侃

您可以使用捕获组来组织和解析表达式。非捕获组具有第一个好处,但没有第二个的开销。例如,您仍然可以说非捕获组是可选的。假设你想匹配数字文本,但有些数字可以写成第1,第2,第3,第4 ......如果你想捕获数字部分而不是(可选)后缀你可以使用非捕获组。([0-9]+)(?:st|nd|rd|th)?这将匹配形式1,2,3 ......或者形式为1st,2nd,3rd,......但它只会捕获数字部分。

慕田峪4524236

?: 当您想要对表达式进行分组时使用,但您不希望将其保存为字符串的匹配/捕获部分。一个例子是匹配IP地址:/(?:\d{1,3}\.){3}\d{1,3}/请注意,我不关心保存前3个八位字节,但(?:...)分组允许我缩短正则表达式而不会产生捕获和存储匹配的开销。

明月笑刀无情

它使组不捕获,这意味着该组匹配的子字符串不会包含在捕获列表中。ruby中的一个例子来说明差异:"abc".match(/(.)(.)./).captures #=> ["a","b"]"abc".match(/(?:.)(.)./).captures #=> ["b"]
随时随地看视频慕课网APP
我要回答