2010-11-16 30 views
14

tengo la siguiente expresión regular:JavaScript excepción expresión regular (Grupo no válido)

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

Estoy tratando de encontrar entero índice en cadenas como éste:

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

Esa expresión funciona bien con php, pero no funciona en javascript, me aparece el siguiente error:

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

¿Qué necesito? ¿arreglar?

Gracias.

+0

intente escaparse de sus llaves. – drudge

+0

@jnpcl Acabo de probarlo hace un minuto 'Uncaught SyntaxError: expresión regular no válida:/(? <= \ {Index:) \ d + (? = \}) /: Invalid group' no funciona, a menos que exista Otra forma de escapar de los paréntesis que no sean '\ {' –

Respuesta

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

Ah, ya veo, no '/ g' realmente ayuda =) –

31

(?<=) es un aspecto positivo detrás. El sabor de JavaScript de RegEx no admite lookbehinds (pero sí admite lookaheads).

+2

Tienes razón, ¿alguna ayuda con la expresión en particular? –

+1

@mike: Por favor, elabore ... – alex

8

JavaScript no admite aserciones de observación. Use este patrón en su lugar:

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

Luego extraiga el valor capturado en el grupo.

+0

extrae todo, en mi caso solo necesito un número entero. –

+0

@negative: Observe los paréntesis alrededor de '\ d +'; el entero se captura en el grupo # 1. –

+0

@Alan Moore, puede ser que estoy haciendo algo mal, pero '" algún texto {index: 1} {id: 2} {value: 3} ". Match (/ {index: (\ d +)}/g) [ 0] 'devuelve' {index: 1} 'AND' "algún texto {index: 1} {id: 2} {value: 3}". Match (/ {index: (\ d +)}/g) [1] 'devuelve 'indefinido'. –

Cuestiones relacionadas