Twoje zrozumienie jest złe. Grupa nadal będzie częścią głównego przechwytywania, ale nie będzie liczona jako przechwytywanie podekspresji. Następujące wróci tablicę z dwóch wyników:
x = "abcdefg"
x = x.match(/ab(cd)ef/)
indeksu tablicy 0 będzie „ABCDEF” (pełna dopasowanie) i wskaźnik tablicy 1 będzie „cd” wychwytywanie sub ekspresja. Dodanie ?:
mówi regexowi, aby nie przejmował się przechwytywaniem podekspozycji, pełny mecz jest nadal w pełni przechwytywany.
Z pozostałych komentarzy wynika, że możesz zrobić to, na co masz ochotę. Na przykład:
x.replace(/(ab)cd(ef)/, "$1$2");
x.slice(0, x.indexOf("cd")) + x.slice(x.indexOf("cd") + 2);
Aby osiągnąć to, co chcę, musiałbym zrobić = x.match (/ (ab) (?: cd) (ef) /); x = a [1] + a [2]; poprawny? – Murali
@wizard: Możesz to zrobić, tak, ale grupa przechwytująca nie jest potrzebna do tego konkretnego wyrażenia. '/ (ab) cd (ef) /' wykonałby tę samą pracę. 'x.replace (/ (ab) cd (ef) /," $ 1 $ 2 ");' zrobiłoby to jeszcze lepiej, ale wyobrażam sobie, że twoja prawdziwa ekspresja jest trochę bardziej skomplikowana niż twój przykład tutaj :-). –