La tua comprensione è sbagliata. Il gruppo sarà ancora parte dell'acquisizione principale, ma non conterà come acquisizione di sottoespressione. Il seguente restituirebbe un array di due partite:
x = "abcdefg"
x = x.match(/ab(cd)ef/)
indice Array 0 sarebbe "ABCDEF" (la corrispondenza completa) e indice di matrice 1 sarebbe "CD", la cattura sub-espressione. Aggiungendo il ?:
si dice alla regex di non preoccuparsi di catturare la sottoespressione, la piena corrispondenza è ancora completamente catturata.
Dai tuoi altri commenti, ci sono un certo numero di modi in cui puoi fare ciò che stai cercando di fare. Per esempio:
x.replace(/(ab)cd(ef)/, "$1$2");
x.slice(0, x.indexOf("cd")) + x.slice(x.indexOf("cd") + 2);
fonte
2010-03-29 23:11:04
Quindi, per ottenere ciò che voglio, dovrei fare a = x.match (/ (ab) (?: cd) (ef) /); x = a [1] + a [2]; corretta? – Murali
@wizard: puoi farlo, sì, ma il gruppo che non cattura non è necessario per quella particolare espressione. '/ (ab) cd (ef) /' farebbe lo stesso lavoro. 'x.replace (/ (ab) cd (ef) /," $ 1 $ 2 ");' lo farebbe ancora meglio, ma immagino che la tua vera espressione sia un po 'più complicata del tuo esempio qui :-). –