2010-11-16 10 views
14

Ich habe die folgenden regulären Ausdruck:JavaScript regulären Ausdruck Ausnahme (Ungültige Gruppe)

/(?<={index:)\d+(?=})/g 

Ich versuche Index integer in Strings wie diese zu finden:

some text{index:1}{id:2}{value:3} 

Dieser Ausdruck funktioniert mit php, aber es funktioniert nicht in Javascript, bekomme ich den folgenden Fehler:

Uncaught SyntaxError: Invalid regular expression: /(?<={index:)\d+(?=})/: Invalid group

Was brauche ich reparieren?

Danke.

+0

versuchen Sie, Ihre geschweiften Klammern zu entkommen. – drudge

+0

@jnpcl Ich habe es gerade vor einer Minute versucht 'Uncaught SyntaxError: Ungültiger regulärer Ausdruck:/(? <= \ {Index:) \ d + (? = \}) /: Ungültige Gruppe' funktioniert nicht, es sei denn, es gibt eine andere Möglichkeit, geschweifte Klammern als '\ {' –

Antwort

4
var str = "some text{index:1}{id:2}{value:3}"; 
var index = str.match(/{index:(\d+)}/); 
index = index && index[1]*1; 
+0

Ah, ich sehe, kein '/ g' hilft wirklich =) –

31

(?<=) ist ein positiver Lookbehind. JavaScripts Geschmack von RegEx unterstützt keine Lookbehinds (unterstützt aber Lookaheads).

+2

zu entkommen. Sie haben Recht, jede Hilfe mit dem bestimmten Ausdruck? –

+1

@mike: Bitte erarbeiten ... – alex

8

JavaScript unterstützt keine Look-Back-Assertions. Verwenden Sie stattdessen dieses Muster:

/{index:(\d+)}/g 

Dann extrahieren Sie den in der Gruppe erfassten Wert.

+0

extrahiert es das Ganze, in meinem Fall brauche ich nur eine ganze Zahl. –

+0

@negative: Beachten Sie die Klammern um das '\ d +'; Die ganze Zahl wird in Gruppe 1 erfasst. –

+0

@Alan Moore, kann ich etwas falsch machen, aber '" einige Text {Index: 1} {ID: 2} {Wert: 3} ". Match (/ {Index: (\ d +)}/g) [ 0] 'returns' {index: 1} 'AND' "irgendein Text {index: 1} {id: 2} {value: 3}". Übereinstimmung (/ {index: (\ d +)}/g) [1] 'gibt 'undefiniert' zurück. –