Tengo una matriz en formato de cadena. Con Javascript, cómo reemplazar [ , ] , <Tag: y > en la menor cantidad de código posible:
let s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]"El resultado final debería verse así:
"cats, dogs, parakeets"Esto parece funcionar, pero es bastante... no genial.
s.replace(/^\[/, '').replace(/\]$/, '').replaceAll('<Tag: ', '').replaceAll('>', '')¿Hay una manera inteligente de hacer esto con RegEx?
Hacer coincidir <Tag: y luego capturar caracteres que no sean > parece que haría lo que desea:
const s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]"; const result = s.replace(/<Tag: ([^>]+)>/g, '$1').replace(/[[\]]/g, ''); console.log(result);Otro enfoque, hacer coincidir en lugar de reemplazar:
const s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]"; const result = [...s.matchAll(/<Tag: ([^>]+)>/g)] .map(match => match[1]) .join(', '); console.log(result);Sugeriría hacer coincidir todas las subcadenas y unirlas:
const result = [...s.matchAll(/<Tag:\s*(\w+)>/g)] .map( ([, m]) => m ) .join(', '); // result: "cats, dogs, parakeets"Cuando se admite un cuantificador infinito en un lookbehind, puede hacer coincidir todos los valores entre <Tag: y > y asegurarse de que todas las coincidencias estén entre corchetes.
Vea las coincidencias de expresiones regulares en esta demostración de expresiones regulares .
let s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]" const regex = /(?<=\[[^\][]*<Tag: )\w+(?=>[^\][]*\])/g; console.log(s.match(regex).join(", "));