module.exports = function (opts) { var sep = opts ? opts.sep : '{}'; var len = sep.length; var whitespace = '\\s*'; var left = escape(sep.substring(0, len / 2)) + whitespace; var right = whitespace + escape(sep.substring(len / 2, len)); return function (template, values) { Object.keys(values).forEach(function (key) { var value = String(values[key]).replace(/\$/g, '$$$$'); template = template.replace(regExp(key), value); }); return template; }; function escape(s) { return [].map .call(s, function (char) { return '\\' + char; }) .join(''); } function regExp(key) { return new RegExp(left + key + right, 'g'); } };