-
茅侃侃
您可以使用捕获组来组织和解析表达式。非捕获组具有第一个好处,但没有第二个的开销。例如,您仍然可以说非捕获组是可选的。假设你想匹配数字文本,但有些数字可以写成第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"]