Здравствуйте. Сделал маленький простой шаблонизатор:
/**
* Обработка тегов, шаблонизатор
* @param {string} - входные данные
* @param {string|object} - название искомого тега или объект {тег: значение}
* @param {string} - значение, на которое должен заменится тег
* @returns {string} - обработанная строка
**/
function tag(input, key, value) {
var pattern = function(search, data) {
return input.replace(new RegExp('{'+ search +'}', 'gi'), data);
};
if (typeof key === 'string' && value !== undefined) {
return pattern(key, value);
} else {
for (var item in key) {
input = pattern(item, key[item]);
}
return input;
}
}
// Пример использования
tag('{base}/{path}/files/{language}/config.js', {
base: 'https://example.com',
path: 'js/modules',
language: 'en'
});
//> https://example.com/js/modules/files/en/config.js
В нем есть большой недостаток, это скорость работы. Через него могут проходить большие css/js/html файлы и регулярка будет проходится столько раз сколько свойст в переданного объекта. Нужно сделать так, чтобы регулярка проходилась один раз, задать `||` в регулярке или что-то подобное. Есть идеи?