什么是非捕獲組?(?:)做什么?如何?:使用以及它有什么用?
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 關注
- 1102 瀏覽
添加回答
舉報
0/150
提交
取消