Estoy tratando de capturar pares clave:valor dentro de corchetes. Para la siguiente cadena, debería devolver algo como k2:v2 y k3:v3
Str = “k1:v1abc{k2:v2,k3:v3}{test}”
Tengo las siguientes expresiones regulares que capturan lo que necesito individualmente, pero no sé cómo combinarlas.
/(\w+):(\w+)/g >>> Captura clave:valor /{.*?}/g >>> Captura todo entre {}
Si su entorno admite un cuantificador en una aserción de búsqueda posterior:
(?<={[\w:,]*)\w+:\w+(?=[\w:,]*})El patrón coincide:
(?<={[\w:,]*) Positivo mirar atrás, afirmar { y repeticiones opcionales de los caracteres permitidos a la izquierda\w+:\w+ Combina 1+ caracteres de palabra : y 1+ caracteres de palabra(?=[\w:,]*}) Búsqueda anticipada positiva, afirmar repeticiones opcionales de los caracteres permitidos a la derecha y }Vea una demostración de expresiones regulares .
const str = "k1:v1abc{k2:v2,k3:v3}{test}"; const regex = /(?<={[\w:,]*)\w+:\w+(?=[\w:,]*})/g; console.log(str.match(regex));Otra forma podría ser usar 2 pases, primero hacer coincidir el formato y obtener la parte entre las llaves en un grupo de captura.
Si hay una coincidencia, divida el grupo 1 en una coma.
{(\w+:\w+(?:,\w+:\w+)*)}El patrón coincide:
{ Apertura del partido {( Grupo de captura 1\w+:\w+ Combina 1+ caracteres de palabra : y 1+ caracteres de palabra(?:,\w+:\w+)* Opcionalmente repetir a , y el mismo patrón anterior)} Cierre del partido } const str = "k1:v1abc{k2:v2,k3:v3}{test}"; const regex = /{(\w+:\w+(?:,\w+:\w+)*)}/; const m = str.match(regex); if (m) console.log(m[1].split(","));