2009-06-11 14 views
13

Gibt es eine Entsprechung von PHP's preg_match_all in Javascript? Wenn nicht, was wäre der beste Weg, um alle Übereinstimmungen eines regulären Ausdrucks in ein Array zu bringen? Ich bin bereit, jede JS-Bibliothek zu verwenden, um es einfacher zu machen.preg_match_all JS entspricht?

Antwort

18

Sie match mit dem globalen Modifikator verwenden können:

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

Ich verstehe nicht, dass die Syntax. – erm3nda

+0

@ erm3nda ich denke **/\ d/g ** hast du nicht verstanden. Hier [Erstellen eines regulären Ausdrucks in Javascript] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions). –

10

John Resig über eine große Technik auf seinem Blog namens ‚Search and dont replace

Es funktioniert mit der JavaScript-Ersetzen-Funktion, die einen Rückruf nimmt geschrieben hat Funktion und gibt nichts zurück, um den ursprünglichen Inhalt unverändert zu lassen.

Dies kann besser sein als die Verwendung einer globalen Übereinstimmung und die Iteration über eine Reihe von Ergebnissen, insbesondere wenn Sie mehrere Gruppen erfassen.

1

Eine bessere Entsprechung von preg_match_all aus PHP in JS wäre die Verwendung der Funktion exec(). Dadurch können Sie auch Gruppen erfassen, mit match() können Sie das nicht tun.

Zum Beispiel möchten Sie alle Zeiten und die Anzahl in Klammern aus der Variablen myString erfassen:

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

Der Ausgang wird sein:

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