2010-11-16 19 views
14

Ho la seguente espressione regolare:JavaScript (Gruppo non valido)

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

sto cercando di trovare indice intero in stringhe come questo:

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

Quell'espressione funziona bene con php, ma non funziona in javascript, ottengo il seguente errore:

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

cosa ho bisogno aggiustare?

Grazie.

+0

provare a sfuggire le parentesi graffe. – drudge

+0

@jnpcl L'ho appena provato un minuto fa 'Uncaught SyntaxError: espressione regolare non valida:/(? <= \ {Index:) \ d + (? = \}) /: Gruppo non valido' non funziona, a meno che non ci sia un altro modo per sfuggire a parentesi graffe diverse da '\ {' –

risposta

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

Ah, vedo, no '/ g' aiuta veramente =) –

31

(?<=) è un aspetto positivo. Il gusto di JavaScript di RegEx non supporta lookbehinds (ma supporta i lookaheads).

+2

Hai ragione, qualche aiuto con la particolare espressione? –

+1

@ mike: Si prega di elaborare ... – alex

8

JavaScript non supporta le affermazioni look-behind. Utilizzare invece questo modello:

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

Quindi estrarre il valore catturato nel gruppo.

+0

estrae tutto, nel mio caso ho solo bisogno di un numero intero. –

+0

@negativo: nota le parentesi attorno a '\ d +'; il numero intero viene catturato nel gruppo # 1. –

+0

@Alan Moore, potrebbe essere che sto facendo qualcosa di sbagliato, ma '' qualche testo {indice: 1} {id: 2} {valore: 3} ". Match (/ {indice: (\ d +)}/g) [ 0] 'restituisce' {indice: 1} 'AND' "qualche testo {indice: 1} {id: 2} {valore: 3}". Corrisponde (/ {indice: (\ d +)}/g) [1] 'restituisce 'undefined'. –