Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как преобразовать строку в шаблонную строку (template literals) (https://javascript.ru/forum/dom-window/70379-kak-preobrazovat-stroku-v-shablonnuyu-stroku-template-literals.html)

daima 01.09.2017 10:03

Как преобразовать строку в шаблонную строку (template literals)
 
Получаю из базы строку blabal ${param} blabla

Как ее преобразовать в шаблонную строку, чтобы она воспринималась как `blabal ${param} blabla`

Alexandroppolus 01.09.2017 10:42

боюсь, что только eval :(

var str = "blabal ${param} blabla";

var param = 123;
alert(eval('`' + str + '`'));


если в этих строках из базы как-то зафиксирован набор возможных параметров, то лучше через new Function
например, возможен только "param":
var str = "blabal ${param} blabla";
var param = 123;

var func = new Function('param', 'return `' + str + '`;');

alert(func(param));


а если набор параметров не зафиксировал, то все не очень правильно - идет завязка данных из базы на js-код.

daima 01.09.2017 16:29

Спасибо. В итоге решил через регулярки, но чета не заменяет:

var content =  '${start_time} и не  ${end_time} включительно.';

var param={'end_time':'007'}

for(var key in param){			
   content = content.replace(new RegExp('\${'+key+'}','g'),param[key])
}



Не поймк че не так(

Nexus 01.09.2017 16:41

daima,
var content =  '${start_time} и не  ${end_time} включит${end_time}ельно.';

var param={'end_time':'007'}

for(var key in param){			
   content = content.split('${'+key+'}').join(param[key]);
}
alert(content);

рони 01.09.2017 16:43

daima,
\\$

Alexandroppolus 01.09.2017 17:14

daima,

через регулярки лучше так:
var content =  '${start_time} и не  ${end_time} включительно.';

var param={'end_time':'007'}

content = content.replace(/\$\{([a-z0-9_-]+)\}/g, function(m, key) {
  return param[key] || m;
});

alert(content);


Часовой пояс GMT +3, время: 09:18.