javascript, regex analiza el contenido de la cadena entre llaves

soy nuevo en regex. Estoy tratando de analizar todo el contenido dentro de los corchetes en una cadena. Busqué esta publicación como reference e hice exactamente lo que sugiere una de las respuestas, sin embargo, el resultado es inesperado.

Aquí esta lo que hice

var abc = "test/abcd{string1}test{string2}test" //any string var regex = /{(.+?)}/ regex.exec(abc) // i got ["{string1}", "string1"] //where i am expecting ["string1", "string2"] 

Creo que me estoy perdiendo algo, ¿qué estoy haciendo mal?

actualizar

Pude getlo con /g para una búsqueda global

 var regex = /{(.*?)}/g abc.match(regex) //gives ["{string1}", "{string2}"] 

¿cómo puedo get la string sin corchetes?

 "test/abcd{string1}test{string2}test".match(/[^{}]+(?=\})/g) 

produce

 ["string1", "string2"] 

Supone que cada } tiene una { antes de que {...} y {...} secciones correspondientes no aniden. Tampoco capturará el contenido de secciones {} vacías.

Prueba esto:

 var abc = "test/abcd{string1}test{string2}test" //any string var regex = /{(.+?)}/g //g flag so the regex is global abc.match(regex) //find every match 

un buen lugar para leer acerca de Regex en JavaScript está aquí , y un buen lugar para probar está aquí

¡buena suerte!

 var abc = "test/abcd{string1}test{string2}test" //any string var regex = /{(.+?)}/g var matches; while(matches = regex.exec(abc)) console.log(matches); 

Nada mal. Pero deberá mirar sus grupos de captura (el segundo elemento de la matriz) para get el contenido que desea (puede ignorar el primero). Para get todas las ocurrencias, no es suficiente ejecutar exec una vez, tendrás que recorrer los resultados usando match .

Editar : no importa que, afaik no puede acceder a grupos de captura con match . Una solución más simple sería usar una anticipación positiva, como sugirió Mike Samuel.

Este resultado:

 ["{string1}", "string1"] 

te muestra que para la primera coincidencia, toda la expresión regular coincidía con "{string1}" y los primeros paréntesis de captura coincidían con "string1" .

Si quieres get todas las coincidencias y ver todas las capturas de parens de cada partida, puedes usar la bandera "g" y recorrer, llamando a exec() varias veces como esta:

 var abc = "test/abcd{string1}test{string2}test"; //any string var regex = /{(.+?)}/g; var match, results = []; while (match = regex.exec(abc)) { results.push(match[1]); // save first captunetworking parens sub-match into results array } // results == ["string1", "string2"] 

Puedes verlo funcionar aquí: http://jsfiddle.net/jfriend00/sapfm/