$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
}));
Вам также не нужно экранировать первый {
.