2010-11-16 6 views
14

je l'expression régulière suivante:JavaScript exception expression régulière (groupe non valide)

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

Je suis en train de trouver entier d'index dans les chaînes comme celui-ci:

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

Cette expression fonctionne très bien avec php, mais cela ne fonctionne pas en javascript, j'obtiens l'erreur suivante:

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

De quoi ai-je besoin? réparer?

Merci.

+0

essayez d'échapper à vos accolades. – drudge

+0

@jnpcl Je viens de l'essayer il ya une minute 'Uncaught SyntaxError: Expression régulière invalide:/(? <= \ {Index:) \ d + (? = \}) /: Groupe invalide' ça ne marche pas, sauf s'il y a une autre façon d'échapper à des accolades autres que '\ {' –

Répondre

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

Ah, je vois, pas '/ g' aide vraiment =) –

31

(?<=) est un lookbehind positif. La saveur de RegEx de JavaScript ne supporte pas lookbehinds (mais supporte les lookaheads).

+2

Vous avez raison, toute aide avec l'expression particulière? –

+1

@mike: S'il vous plaît élaborer ... – alex

8

JavaScript ne prend pas en charge les assertions look-behind. Utilisez ce modèle à la place:

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

Ensuite, extrayez la valeur capturée dans le groupe.

+0

il extrait le tout, dans mon cas, j'ai juste besoin d'un nombre entier. –

+0

@negative: Notez les parenthèses autour de '\ d +'; l'entier est capturé dans le groupe # 1. –

+0

@Alan Moore, peut-être que je fais quelque chose de mal, mais '" un texte {index: 1} {id: 2} {valeur: 3} ". Match (/ {index: (\ d +)}/g) [ 0] 'renvoie' {index: 1} 'AND' "du texte {index: 1} {id: 2} {valeur: 3}". Match (/ {index: (\ d +)}/g) [1] 'renvoie 'indéfini'. –

Questions connexes