Exactamente qué título pide. Proporcionaré algunos ejemplos mientras explico mi pregunta.¿La mejor manera de almacenar JS Regex capturando grupos en la matriz?
cadena de prueba:
var test = "#foo# #foo# bar #foo#";
Say, quiero extraer todo el texto entre #
(todos foo
s pero no bar
).
var matches = test.match(/#(.*?)#/g);
Usando .match
que el anterior, que va a almacenar todos los partidos, pero que simplemente va a tirar los grupos de captura que parece.
var matches2 = /#(.*?)#/g.exec(test);
El método .exec
aparentemente sólo devuelve cadena coincidente del primer resultado en la posición 0
de la matriz y mi único grupo de captura de ese partido en la posición 1
.
He agotado SO, Google y MDN en busca de una respuesta en vano.
Entonces, mi pregunta es, ¿hay alguna forma mejor de almacenar solo los grupos de captura coincidentes que recorrerlo con .exec
y llamar al array.push
para almacenar los grupos capturados?
Mi gama esperada para la prueba anterior debe ser: se aceptan
[0] => (string) foo
[1] => (string) foo
[2] => (string) foo
Pure respuestas JS y jQuery, galletas extra si publican jsFiddle con console.log
. =]
Similar al bucle '.exec' que encontré pero mucho más simplificado y elegante, parece una respuesta adecuada, ya que puedo acceder a todas las coincidencias y capturar grupos de la matriz' item'. –
Si desea ver más js magics, puede verificar las respuestas de [am-not-i-am] (http://stackoverflow.com/users/1106925/am-not-i-am), es de una de su respuesta. :) –
Preferido su perfil para leer las respuestas más tarde =] Ahora, incluso después de leer la [Documentación de MDN] (https://developer.mozilla.org/es/JavaScript/Reference/Global_Objects/RegExp/exec) no pude ¿Cómo funciona '.exec' sabe desde dónde empezar a coincidir en la cadena (el" desplazamiento "?) cada vez que se invoca, bueno, importante es que funciona. Creo que almacena automáticamente la propiedad 'lastIndex' Si alguien puede contribuir con un comentario, por favor hazlo. =] –