Tengo una cadena de muestra de la que tengo que extraer valores. Muestra dada:
{#-- important parameters #} {#@@ { 'var1': { 'title':'blah blah', 'type':'text', 'value':'def. text', 'maxlength':10 }, 'var2': { 'title':'blah blah', 'type':'number', 'value':10, 'min':1, 'max':100 } } #} {#@@ { 'var3': { 'title':'blah blah', 'type':'range', 'value':'3.0', 'min':1, 'max':10, step: '0.1' } } #} {#-- normal parameters #} {#@@ { 'var4': { 'title':'blah blah', 'type':'text', 'value':'def. text', 'required':'false' } } #} {{Variable_1}} {{Variable_2}} {{Variable_3}}Quiero extraerlos como se indica a continuación:
1) {#-- parámetros importantes #} a "parámetros importantes" - Regex que solo extraerá de este {#-- #}
2)
{#@@ { 'var1': { 'title':'blah blah', 'type':'text', 'value':'def. text', 'maxlength':10 }, 'var2': { 'title':'blah blah', 'type':'number', 'value':10, 'min':1, 'max':100 } } #} to { 'var1': { 'title':'blah blah', 'type':'text', 'value':'def. text', 'maxlength':10 }, 'var2': { 'title':'blah blah', 'type':'number', 'value':10, 'min':1, 'max':100 } }--- expresión regular que solo extraerá de este {#@@ #}
actualmente usando:
/[^{\#\-]+(?=#\})/g para estas plantillas {#-- parámetros normales #} --- está extrayendo valores de ambos patrones, necesito analizar un patrón a la vez.
/[^#@@]+(?=#\})/g para estas plantillas
{#@@ { 'var1': { 'título':'bla, bla', 'tipo':'texto', 'valor':'def. text', 'maxlength':10 }, 'var2': { 'title':'blah blah', 'type':'number', 'value':10, 'min':1, 'max':100 } } #}
--- está extrayendo valores de ambos patrones, necesito analizar un patrón a la vez
Cualquier ayuda será muy apreciada. Gracias
Una expresión regular no puede analizar dinámicamente una cadena de caracteres. Me explico: no es posible capturar un número de grupos dinámicamente variable.
Sin embargo, esta expresión regular puede coincidir con el grupo "título" y el primer grupo "parámetros":
/ {#--\s+(.*?)\s+#}\s+?{#@@\s+((?:.|\n)+?)\s+#} /gm Si desea hacer coincidir todos los {#@@ XXX #} grupos, debe conocer de antemano el número máximo de casos posibles. Se puede hacer con una expresión regular como esta (en el caso de un máximo de dos parámetros):
/ {#--\s+(.*?)\s+#}\s+?{#@@\s+((?:.|\n)+?)\s+#}(?:\s+?{#@@\s+((?:.|\n)+?)\s+#})? /gmEn caso contrario, deberás hacerlo en dos pasos:
{#@@ XXX #} por {#-- XXX #} en un grupo global{#@@ XXX #} partes.Para una explicación más detallada, la primera expresión regular que se muestra arriba se puede dividir en dos partes:
{#--\s+(.*?)\s+#} por capturar {#-- XXX #} en el group(1){#@@\s+((?:.|\n)+?)\s+#} por capturar {#@@ XXX #} en el group(2)