const person = { name: 'John', middle: 'S', last: 'Smith' } const format = "{ name } { middle } { last}"; Las llaves actúan como un marcador de posición para valores dinámicos. i:e {name} se reemplazará con John , {middle} con S .
El problema al que me enfrento es con la preservación de los espacios entre el formato. i:e si existen dos espacios en {name} {middle} , entonces la salida debería ser John S .
Estoy reemplazando el marcador de posición con valores reales y uniéndolo con el espacio único, pero siempre sería estático.
const person = { name: 'John', middle: 'S', last: 'Smith' } const format = "{ name } { middle } { last}"; function formatStr(obj, format) { return format.match(/\b\w+\b/g).map((s) => person[s]).join(' '); } console.log(formatStr(person, format));La ayuda sería muy apreciada :)
Puede usar una operación .replace , haciendo coincidir las subcadenas entre {...} con una palabra dentro y reemplazándolas con los valores del objeto person , si existen.
const person = { name: 'John', middle: 'S', last: 'Smith' } const format = "{ name } { middle } { last}"; function formatStr(obj, format) { return format.replace(/\{[^\w{}]*(\w+)[^\w{}]*}/g, (x,y) => person[y] ?? x); } console.log(formatStr(person, format)); Esto mantendrá todos los espacios y otros caracteres entre } y { .
Vea la demostración de expresiones regulares . Detalles :
\{ - un { carácter[^\w{}]* - cero o más caracteres que no sean palabras que no sean { y }(\w+) - Grupo 1: uno o más caracteres de palabra[^\w{}]* - cero o más caracteres que no sean palabras que no sean { y }} - un } carácter.