Tengo una cuerda

{{ renderBlock("sometext1",{
    id:1555267
}) }}
{{ renderBlock("sometext2",{
    id:15553
}) }}
{{ renderBlock("sometext3",{
    content:"somecontent"
}) }}

Por lo tanto, necesito extraer argumentos de la función renderBlock Puedo analizar el primer argumento, pero no puedo analizar el segundo argumento - objeto js

La expresión regular /{{ renderBlock\("(.*)",{(.|\n)[^)}]*/ no funciona

-1
Андрей Луговской 29 oct. 2017 a las 20:13

3 respuestas

La mejor respuesta

No sé cómo puede cambiar su cadena, pero esto funciona para el ejemplo dado:

renderBlock\("(.+)",((.|\n)+?)\)

El grupo 1 es el primer argumento, el grupo 2 es el segundo argumento.

Pruébalo aquí!

0
Sweeper 29 oct. 2017 a las 17:20

El segundo argumento es entre llaves, tal vez regex es lo que está buscando:

{{ renderBlock\("(.*)",({(?:.|\n)+?})

Esto dará como resultado 2 grupos de captura.

0
The fourth bird 29 oct. 2017 a las 17:27

Modifico un poco tu expresión regular. Prueba esto

'{{ renderBlock("sometext3",{content:"somecontent"}) }}'.match(/{{ renderBlock\("(.*)"(,\{[^)]*\})\)*.*/)

La expresión regular

/{{ renderBlock\("(.*)"(,\{[^)]*\})\)*.*/
0
Djory Krache 29 oct. 2017 a las 17:29