2009-06-11 12 views
13

¿Hay un equivalente de preg_match_all de PHP en Javascript? Si no, ¿cuál sería la mejor manera de obtener todas las coincidencias de una expresión regular en una matriz? Estoy dispuesto a utilizar cualquier biblioteca JS para que sea más fácil.preg_match_all equivalente JS?

Respuesta

18

Puede utilizar match con el modificador mundial:

>>> '1 2 3 4'.match(/\d/g); 
["1", "2", "3", "4"] 
+1

yo no entendía que la sintaxis. – erm3nda

+0

@ erm3nda, creo **/\ d/g ** es que no entendiste. Aquí [Creación de una expresión regular en Javascript] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions). –

10

John Resig ha escrito sobre una gran técnica en su blog llamado 'Search and dont replace'

Funciona utilizando la función de JavaScript, que tiene una devolución de llamada reemplazan función, y no devuelve nada para dejar inalterado el contenido original.

Esto puede ser más útil que usar una coincidencia global e iterar sobre una matriz de resultados, especialmente si está capturando varios grupos.

1

Un mejor equivalente de preg_match_all de PHP en JS sería usar la función exec(). Esto le permitirá capturar grupos también, con match() no puede hacer eso.

Por ejemplo, usted desea capturar todos los tiempos y el número entre paréntesis de la miCadena variables:

var myString = "10:30 am (15 left)11:00 am (15 left)11:30 am"; 
var pattern = /(\d{1,2}:\d{1,2}\s?[ap]m)\s\((\d+)/gi; 
var match; 
while (match = pattern.exec(myString)){ 
    console.log('Match: "' + match[0] + '" first group: -> "' + match[1] + '" second group -> ' + match[2]); 
} 

La salida será:

Match: "10:30 am (15" first group: -> "10:30 am" second group -> 15 
Match: "11:00 am (15" first group: -> "11:00 am" second group -> 15 
Cuestiones relacionadas