Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.09.2017, 10:03
Аспирант
Отправить личное сообщение для daima Посмотреть профиль Найти все сообщения от daima
 
Регистрация: 01.08.2012
Сообщений: 59

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

Как ее преобразовать в шаблонную строку, чтобы она воспринималась как `blabal ${param} blabla`
Ответить с цитированием
  #2 (permalink)  
Старый 01.09.2017, 10:42
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,004

боюсь, что только 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-код.
Ответить с цитированием
  #3 (permalink)  
Старый 01.09.2017, 16:29
Аспирант
Отправить личное сообщение для daima Посмотреть профиль Найти все сообщения от daima
 
Регистрация: 01.08.2012
Сообщений: 59

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

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])
}



Не поймк че не так(
Ответить с цитированием
  #4 (permalink)  
Старый 01.09.2017, 16:41
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,706

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);
Ответить с цитированием
  #5 (permalink)  
Старый 01.09.2017, 16:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

daima,
\\$
Ответить с цитированием
  #6 (permalink)  
Старый 01.09.2017, 17:14
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,004

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);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать регулярное выражение, которое будет возвращать строку? Armen Общие вопросы Javascript 2 09.10.2014 22:29
Как получить в JQUERY каждую строку как отдельный объект? Alex1233 Общие вопросы Javascript 3 22.08.2014 06:54
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как преобразовать строку с тегами в DOM элимент GOll Общие вопросы Javascript 7 07.04.2010 10:39
как преобразовать пароль на * pilot Общие вопросы Javascript 2 24.08.2009 17:50