2016-07-28 18 views
2

Ich habe einige Fußballtor Informationen wie diese dargestellt bekam:JavaScript Regex - versuchen, alle Zahlen übereinstimmen in (5' , 78' , 80 ') (90' + 2') voran nicht von +

(5' , 78' , 80 ') (90' + 2')

I JavaScript verwenden möchte alle Zahlen übereinstimmen nicht durch ein + Vorzeichen (der 2 in diesem Fall). Ich weiß nicht, wie ich das ohne negative Lookbehinds machen kann.

Ich habe dies versucht:

"(5', 78', 80')(90'+2')".match(/[^+]\d+'/g) 

aber ich bekomme Klammern, Leerzeichen und ' in meiner zurückSpiele:

["(5'", " 78'", " 80'", "(90'"] 

Ich bin für ein Ergebnis sah aus wie. Beachten Sie es nicht die Nummer 2 darin hat, weil 2 mit + vorangestellt ist

["5", "78", "80", "90"] 

Alle Zeiger wird geschätzt.

+2

Erster Gedanke verwenden: Entfernen Zahlen von + voraus, dann können Sie alle Zahlen abgleichen. –

+0

Warum habe ich nicht daran gedacht? Dies ist definitiv die einfachste Lösung! Vielen Dank. – jrahhali

+0

Benötigen Sie eine einzelne Regexp oder können Sie mit JS-Bits arbeiten, um Vor- und Nachfilterung durchzuführen? –

Antwort

4

Sie können ein aufgenommenes Gruppe für den Wert verwenden Sie in Folge wollen:

var regexp = /(?:\+\d+|(\d+))'/g; 
var str = "(5', 78', 80')(90'+2')"; 
var m; 
var result = []; 

while ((m = regexp.exec(str))) { 
    if (m[1] !== undefined) 
     result.push(m[1]); 
} 
console.log(result); 
//=> ["5", "78", "80", "90"] 
+1

Clever! Verwenden einer Erfassungsgruppe innerhalb einer nicht erfassenden Gruppe. Habe heute etwas neues gelernt :) – jrahhali

0

Sie dieses Muster

(?:[^+]|^)(\d+(\.\d+)?) 

Demo