Как бы мне не хотелось бросать свой собственный RegExp (а вам действительно нужен глобальный флаг), вы смотрели на шаблоны прототипов , Trimpath JST или что-то в этом роде?
Потому что, возможно, сворачивание собственного не будет таким же эффективным для повторного использования, как в приведенных выше примерах. EG:
String.prototype.template = function (obj) {
return this.replace(/{([^{}]+)}/g,
function (full, word) {
return((typeof obj[word]==='string'||typeof obj[word]==='number')?obj[word]:full);
}
);
};
"The {adj1} {adj2} {noun}.".template({adj1: 'lazy',adj2: 'brown', noun: 'dog'})
==> "The lazy brown dog."
Это запускает ваше регулярное выражение каждый раз, хотя я считаю, что шаблоны-прототипы в основном делают это один раз.