const regex = /(?<!\{)\{([^\s}]+)\}(?!\})/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?<!\\{)\\{([^\\s}]+)\\}(?!\\})', 'g')
const str = `<?php
return
[
'server'=> [
'host'=> 'smtp.saluddigital.net',
//'helo'=> url('domain'),
'username'=> 'php7@saluddigital.net',
'password'=> 'x5~JkKU+X(NY4R\$C',
'port'=> '25',
'charset'=> '{\\web.charset}',
],
'mails'=> [
// Para especificar varias direcciones, separarlas por comas
// Para especificar un nombre para una dirección, usamos el formato
// estándard nombre <email>, <email>.
// Ejemplos:
// 'jatubio@saluddigital.net'
// 'Andrés Pozo <apozo@saluddigital.net>, ergon@saluddigital.net'
//
// Usar {domain} para sustituirlo por el dominio actual
'default'=> [
'asunto'=> '{\\web.titulo}',
'from'=> '{\\web.titulo} <info@[url domain]>',
'replyto'=> '',
// Poner siempre en copia
'cc'=> '',
// Poner siempre en copia oculta
'cco'=> '',
// Direcciones para enviar la copia de administración
'admin'=> 'jatubio@saluddigital.net',
// Activar/Desactivar la copia de administración
'adminsend'=> true,
// Enviar una copia si está activado el flag de debug
'debug'=> 'jatubio@saluddigital.net',
// Activar/Desactivar la copia de debug
'debugsend'=> true,
// Modificar alguna de las opciones anteriores si cumple el filtro
'filtros'=> [
'paises'=> [
'filtro'=> [
'Pais'=>'España',
],
'opciones'=> [
'asunto'=>'Hola desde España',
],
],
],
],
// Formulario de contacto
'contacto'=> [
'asunto'=> 'Contacto desde {\\web.titulo}',
'from'=> '{\\web.titulo} <contacto@[url domain]>',
// Campos a incluir en el [repetir datos]
// Si está vacío, se incluyen todos
'campos'=> ['Nombre', 'Apellidos', 'Telefono', 'EMail', 'Pais', 'Curso', 'Comentario'],
'campoTo' => 'Nombre <EMail>',
//template=> 'contacto',
],
],
'templates'=> [
'base'=>'General',
],
];
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// Ejemplos
//--------------------------------------------------------------------
//--------------------------------------------------------------------
return
[
'server'=> [
'host'=> 'smtp.saluddigital.net',
'helo'=> url('domain'),
'username'=> 'php7@saluddigital.net',
'password'=> 'x5~JkKU+X(NY4R\$C',
'port'=> '25',
'charset'=> '{\\web.charset}',
],
// Para especificar varias direcciones, separarlas por comas
// Para especificar un nombre para una dirección, usamos el formato
// nombre=>email.
// Ejemplos:
// 'jatubio@saluddigital.net'
// 'Andrés Pozo=>apozo@saluddigital.net, ergon@saluddigital.net'
'default'=> [
'asunto'=> '{\\web.titulo}',
'from'=> '{\\web.titulo}=>info@[url domain]',
'replyto'=> '',
// Poner siempre en copia
'cc'=> '',
// Poner siempre en copia oculta
'cco'=> '',
// Direcciones para enviar la copia de administración
'admin'=> 'jatubio@saluddigital.net',
// Activar/Desactivar la copia de administración
'adminsend'=> true,
// Enviar una copia si está activado el flag de debug
'debug'=> 'jatubio@gmail.com',
// Activar/Desactivar la copia de debug
'debugsend'=> true,
// Modificar alguna de las opciones anteriores si cumple el filtro
'filtros'=> [
'paises'=> [
'filtro'=> [
'Pais'=>'España',
],
'opciones'=> [
'asunto'=>'Hola desde España',
],
],
'cursos' => [
'filtro'=> [
'Curso'=>'Consulta General',
],
'opciones'=> [
'cco'=>'consultas@gmai.com',
],
]
],
],
// Formulario de contacto
'contacto'=> [
'asunto'=> 'Contacto desde {\\web.titulo}',
'from'=> '{\\web.titulo} <contacto@[url domain]>',
'filtros'=> [
'paises'=> [
'filtro'=> [
'Pais'=>'Costa Rica, Francia, Perú',
],
'opciones'=> [
'asunto'=>'Hola desde Costa Rica',
'from'=> '{\\web.titulo
} <costarica@[url domain]>',
],
'activo'=> false,
],
'casos'=> [
'filtro'=> [
'NumCaso'=>'1, 8, 10',
],
'opciones'=> [
'{{asunto}}'=>'Consulta sobre un caso',
'cc'=> 'especialista@gmail.com',
],
],
'cursos'=> [
'activo'=> false,
]
],
],
];`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions