javascript - Păstrează spațiile menționate în formatul șirului
const person = {
name: 'John',
middle: 'S',
last: 'Smith'
}
const format = "{ name } { middle } { last}";
Parantezele acolade funcționează ca un substitut pentru valori dinamice. De exemplu, {name} va fi înlocuit cu John, {middle} cu S.
Problema cu care mă confrunt este legată de păstrarea spațiilor dintre format. De exemplu, dacă există două spații în {name} {middle}, atunci ieșirea ar trebui să fie John S.
Înlocuiesc elementul de tip placeholder cu valori reale și le combin cu un spațiu simplu, dar va fi întotdeauna static.
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));Ajutorul ar fi cu adevărat apreciat :)
Răspuns #1
Poți folosi o operațiune .replace, potrivind subșirurile dintre {...} cu un singur cuvânt în interior și înlocuind cu valorile din obiectul person dacă există.
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));Acesta va păstra toate spațiile și celelalte caractere dintre } și {.
Vezi demo-ul regex. Detalii:
\{- un caracter{[^\w{}]*- zero sau mai multe caractere non-cuvânt diferite de{și}(\w+)- Grupul 1: unul sau mai mulți caractere de tip cuvânt[^\w{}]*- zero sau mai multe caractere non-cuvânt diferite de{și}}- un caracter}.
