2010-03-29 13 views

Respuesta

22

(?:...) todavía partidos, simplemente no crea un nuevo grupo para fines de \1/$1/.groups(1)/etc.

+0

Así que para lograr lo que quiero, tendría que hacer a = x.match (/ (ab) (?: cd) (ef) /); x = a [1] + a [2]; ¿correcto? – Murali

+3

@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í :-). –

5

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); 
0

Además de las otras respuestas, si realmente se necesita para que coincida con sólo las expresiones externas de expresiones regulares, que tendría que hacer algo como esto:

x = "abcdefg" 
xarr = x.match(/(ab)(?:cd)(ef)/) 
x = xarr[1] + xarr[2] 

Pero ISN realmente expresiones regulares No fue para este caso.

+0

Gracias y de acuerdo con usted, por cierto, creo que quiso decir + en lugar de & – Murali

+0

Ah, sí, es malo. Demasiado VB.Net. – tloflin

Cuestiones relacionadas