Ho appena scritto questa funzione hacky per farlo.L'uso è la seguente:
interpolate("#{gimme}, #{shelter}", {gimme:'hello', shelter:'world'})
// returns "hello, world"
e l'implementazione:
interpolate = function(formatString, data) {
var i, len,
formatChar,
prevFormatChar,
prevPrevFormatChar;
var prop, startIndex = -1, endIndex = -1,
finalString = '';
for (i = 0, len = formatString.length; i<len; ++i) {
formatChar = formatString[i];
prevFormatChar = i===0 ? '\0' : formatString[i-1],
prevPrevFormatChar = i<2 ? '\0' : formatString[i-2];
if (formatChar === '{' && prevFormatChar === '#' && prevPrevFormatChar !== '\\') {
startIndex = i;
} else if (formatChar === '}' && prevFormatChar !== '\\' && startIndex !== -1) {
endIndex = i;
finalString += data[formatString.substring(startIndex+1, endIndex)];
startIndex = -1;
endIndex = -1;
} else if (startIndex === -1 && startIndex === -1){
if ((formatChar !== '\\' && formatChar !== '#') || ((formatChar === '\\' || formatChar === '#') && prevFormatChar === '\\')) {
finalString += formatChar;
}
}
}
return finalString;
};
meglio fare una scorciatoia per allora, questa sintassi non andrà da nessuna parte per un po '. ;) Il meglio che si possa fare è qualcosa come una funzione 'sprintf', ma ciò non renderà le cose più brevi. – deceze
Vedere la risposta più votata nella domanda duplicata. – Phrogz
ECMAscript 6 ha stringhe di template ... quindi sì, in futuro sarai in grado di fare \ 'string testo $ {espressione} stringa di testo \': https://developer.mozilla.org/en-US/docs/ Web/JavaScript/Reference/template_strings – Ajedi32