Su comprensión es incorrecta. El grupo seguirá siendo parte de la captura principal, pero no contará como una captura de sub-expresión. El siguiente sería devolver una matriz de dos partidos:
x = "abcdefg"
x = x.match(/ab(cd)ef/)
índice de matriz 0 habría "abcdef" (la coincidencia completa) y de índice de matriz 1 sería "CD", la captura sub-expresión. Agregar el ?:
le dice a la expresión regular que no se preocupe por capturar la sub-expresión, la coincidencia completa aún se captura por completo.
De sus otros comentarios, hay varias maneras en que podría hacer lo que está tratando de hacer. Por ejemplo:
x.replace(/(ab)cd(ef)/, "$1$2");
x.slice(0, x.indexOf("cd")) + x.slice(x.indexOf("cd") + 2);
Así que para lograr lo que quiero, tendría que hacer a = x.match (/ (ab) (?: cd) (ef) /); x = a [1] + a [2]; ¿correcto? – Murali
@wizard: Podría hacerlo, sí, pero el grupo que no captura no es necesario para esa expresión en particular. '/ (ab) cd (ef) /' haría el mismo trabajo. 'x.replace (/ (ab) cd (ef) /," $ 1 $ 2 ");' lo haría aún mejor, pero imagino que su expresión real es un poco más complicada que su ejemplo aquí :-). –