2012-01-04 3 views
5

Я пытаюсь создать супер простое решение для шаблонов JavaScript. Я хочу использовать метод JavaScript replace, чтобы найти все экземпляры фигурных скобок в шаблоне и заменить их соответствующими данными.Найти и заменить на JavaScript

Например, если мой шаблон был: <p>My name is {{name}}. I am {{age}}.</p>

Я хотел бы результат: <p>My name is Olly. I am 19.</p>

Вот мой код до сих пор: http://jsfiddle.net/2RkAG/

Я пытаюсь сделать это автоматически заменить каждую часть данных, поэтому мне не нужно явно указывать JavaScript, что нужно заменить. Однако у меня возникают проблемы.

ответ

4

$1 работает только в том случае, если вы передаете строку напрямую. Это не работает так, как у вас есть, потому что person["$1"] оценивается до передачи строки до .replace - и person["$1"] буквально undefined.

Вы можете использовать функцию вместо этого: http://jsfiddle.net/2RkAG/1/. Функция вызывается для каждой замены и передаются аргументы, эквивалентные, например, $1.

$result.html(template.replace(/{{(.*?)}}/g, function(a, b) { 
    return person[b]; // a = complete match, b = first group 
})); 

Вам не нужно бежать первый {, либо.

+0

Большое спасибо. Отлично. –

+0

Скажите, что, если я хочу использовать шаблон так: '

Меня зовут {{person.name}}. Я {{person.age}}.

'. У меня это работает с 'eval', но это лучший способ сделать это? Безопасно? Например: http://jsfiddle.net/2RkAG/20/ –

+1

@Oliver Joseph Ash: вам понадобится алгоритм поиска пути, если вы не хотите 'eval': http://jsfiddle.net/2RkAG/24 , – pimvdb