4 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
您可以使用捕獲組來組織和解析表達(dá)式。非捕獲組具有第一個(gè)好處,但沒有第二個(gè)的開銷。例如,您仍然可以說非捕獲組是可選的。
假設(shè)你想匹配數(shù)字文本,但有些數(shù)字可以寫成第1,第2,第3,第4 ......如果你想捕獲數(shù)字部分而不是(可選)后綴你可以使用非捕獲組。
([0-9]+)(?:st|nd|rd|th)?
這將匹配形式1,2,3 ......或者形式為1st,2nd,3rd,......但它只會(huì)捕獲數(shù)字部分。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
?:
當(dāng)您想要對(duì)表達(dá)式進(jìn)行分組時(shí)使用,但您不希望將其保存為字符串的匹配/捕獲部分。
一個(gè)例子是匹配IP地址:
/(?:\d{1,3}\.){3}\d{1,3}/
請注意,我不關(guān)心保存前3個(gè)八位字節(jié),但(?:...)
分組允許我縮短正則表達(dá)式而不會(huì)產(chǎn)生捕獲和存儲(chǔ)匹配的開銷。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
它使組不捕獲,這意味著該組匹配的子字符串不會(huì)包含在捕獲列表中。ruby中的一個(gè)例子來說明差異:
"abc".match(/(.)(.)./).captures #=> ["a","b"]
"abc".match(/(?:.)(.)./).captures #=> ["b"]
- 4 回答
- 0 關(guān)注
- 1109 瀏覽
添加回答
舉報(bào)