var a = "number one: {{one}}. number two: {{two}}";
function renderTemplate(template) {
var reg = /({{\w*}})/g;
return template.replace(reg, function(str){
for(let i = 1; i < 3; i++){
return i;
}
})
};
renderTemplate(a);
Надо что бы в строку перезаписывалось 1 и 2, а записывается только 1(так как цикл сразу возвращает первое значение i). Как исправить ?
Я хочу такой вывод --> number one: 1. number two: 2
А получается такой --> number one: 1. number two: 1
Цикл внутри функции замены не нужен, так как эта функция и так вызывается для каждого из соответствий.
Нужно просто по найденной строке вернуть строку для замены, для этого можно использовать дополнительный объект:
var map = {
one: 1,
two: 2
};
И немного поменять регулярное выражение, чтобы в группу попадало значение внутри скобок.
/{{(\w*)}}/g
Теперь, первым параметром в функцию замены будет приходить полное соответствие: {{one}}
, вторым - значение внутри группы: one
.
При этом тело функции замены выродится в получение значения объекта по ключу
return map[str];
Пример в сборе
var a = "number one: {{one}}. number two: {{two}}";
function renderTemplate(template) {
var reg = /{{(\w*)}}/g;
var map = {
one: 1,
two: 2
};
return template.replace(reg, function(_, str) {
return map[str];
})
};
console.log(renderTemplate(a));
console.log(renderTemplate("number two: {{two}}. number one: {{one}}"));
Вы каждый раз перезапускаете цикл. Вынесите инициализацию переменной
function renderTemplate(template) {
var reg = /({{\w*}})/g;
var i = 1;
return template.replace(reg, function(str){
return i++;
})
};
UPdate:
Не забудьте добавить проверку на существование свойства
function renderTemplate(template) {
var reg = /{{(\w*)}}/g;
var c = { one:1, two:2 }
return template.replace(reg, function(full,str) {
return c[str];
})
};
Виртуальный выделенный сервер (VDS) становится отличным выбором
доброго времени суток, есть функция:
Есть json данные, чтобы отобразить их в jquery плагине генераторе дерева, нужно перевести в формат с указанием id и parent id, причем почти во всех плагинах...