Esta es una pregunta de seguimiento de Reemplazar la etiqueta HTML con una cadena que contiene el atributo de la etiqueta .
Esta vez me gustaría hacer el proceso opuesto y reemplazar las apariciones de ${something.foo.bar} de nuevo a <input type="button" disabled="" data-value="something.foo.bar" value="foo.bar" /> . Por ejemplo, considere esta cadena:
"the quick ${something.brown.fox} jumps over the ${something.lazy.dog}"El resultado final debe ser:
the quick <input type="button" disabled="" data-value="something.brown.fox" value="brown.fox" /> jumps over the <input type="button" disabled="" data-value="something.lazy.dog" value="lazy.dog" /> Tenga en cuenta que something. es un prefijo conocido y siempre estará presente dentro de las llaves, por lo que el valor de los data-value entrada debe ser el valor entre las llaves y el atributo del value de entrada debe contener el valor sin el prefijo.
Intenté resolverlo con múltiples encadenamientos de Regex match y replaceAll pero no logré obtener el resultado deseado.
Ayuda apreciada.
Puedes hacerlo simplemente usando String.replace :
const s = "the quick ${something.brown.fox} jumps over the ${something.lazy.dog}" const res = s.replace(/\$\{([^}]+)\}/g, (x, y) => { const [prefix, ...rest] = y.split('.') return `<input type="button" disabled="" data-value="${y}" value="${rest.join('.')}" />` }) console.log(res)