2009-06-11 14 views
13

Esiste un equivalente del preg_match_all di PHP in Javascript? In caso contrario, quale sarebbe il modo migliore per ottenere tutte le corrispondenze di un'espressione regolare in un array? Sono disposto a utilizzare qualsiasi libreria JS per renderlo più semplice.preg_match_all equivalente JS?

risposta

18

È possibile utilizzare match con il modificatore globale:

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

non ho capito che la sintassi. – erm3nda

+0

@ erm3nda penso **/\ d/g ** non hai capito. Qui [Creazione di un'espressione regolare in Javascript] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions). –

10

John Resig ha scritto su una grande tecnica sul suo blog chiamato 'Search and dont replace'

Funziona tramite javascript della funzione, che prende un callback sostituire funzione, e non restituisce nulla per lasciare inalterato il contenuto originale.

Questo può essere più ordinario rispetto all'utilizzo di una corrispondenza globale e l'iterazione su una serie di risultati, soprattutto se si acquisiscono più gruppi.

1

Un equivalente migliore di preg_match_all da PHP in JS sarebbe utilizzare la funzione exec(). Questo ti permetterà di catturare anche i gruppi, con match() non puoi farlo.

Per esempio si desidera catturare tutti i tempi e il numero tra parentesi dal myString variabile:

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]); 
} 

L'output sarà:

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