2011-03-10 9 views
7
re = /\s{1,}(male)\.$/gi 

"A girl is a female, and a boy is a male.".match(re); 

esto resulta en "male."Javascript Regex Match Capture está devolviendo la concordancia completa, no el grupo

lo que quiero es "macho"

pongo entre paréntesis masculina y pensé que sería capturar sólo ese grupo.

Gracias por la ayuda

+1

sólo puede utilizar la palabra (\ b) en lugar de \ s {1,} en este ejemplo. P.ej./\ bmale/- esto coincidirá con el macho pero no con la hembra. –

Respuesta

9

Es necesario tomar la opción 'g' en su expresión regular:

re = /\s{1,}(male)\.$/i 

produce

[" male.", "male"] 
+0

Aunque ya no será global. Se detendrá en el primer partido. – Francisc

+0

Ya vea el segundo párrafo: La matriz devuelta por el método de coincidencia tiene tres propiedades, entrada, índice y lastIndex. La propiedad de entrada contiene toda la cadena buscada. La propiedad de índice contiene la posición de la subcadena coincidente dentro de la cadena completa buscada. La propiedad lastIndex contiene la posición siguiente al último carácter en la última coincidencia. Si no se establece el indicador global (g), el elemento cero de la matriz contiene la coincidencia completa, mientras que los elementos 1 a n contienen subpares. Si se establece el indicador global, los elementos 0 a n contienen todas las coincidencias que ocurrieron. –

+0

@Francisc: la bandera 'g' no importa en su caso. su patrón contiene el marcador final '$', habrá 1 coincidencia como máximo. – collapsar

-1

En String.prototype.match(), los grupos capturados no son devueltos.

Si necesita los grupos de captura, use RegExp.prototype.exec(). Devolverá una matriz, el primer elemento será la coincidencia completa y los siguientes elementos capturarán los grupos de captura.

var regexObj = /\s{1,}(male)\.$/gi; 

console.log(regexObj.exec('A girl is a female, and a boy is a male.')); 

salida será:

[' male.', 'male'] // Second element is your capture group

Cuestiones relacionadas