Заменить все вхождения “ключевых слов” на одноименные поля объекта

166
09 ноября 2018, 12:10

Нужно заменить в строке все вхождения "ключевых слов" на соответствующие им поля объекта. "Ключевое слово" всегда начинается с # (если необходимо, может и заканчиваться этим символом), само слово полностью соответствует имени поля.

var html = '<span class = "#class">#text</span>';
var obj = {
    class: 'class1',
    text: 'Span Text'
};

Подскажите, как это можно было бы реализовать.

Answer 1

Для решения, можно воспользоваться заменой по регулярному выражению. Для этого у строк есть метод .replace

Регулярное выражение может быть следующим: #(\w+) - выбирается подстрока начинающаяся с # и в которую входят символы из набора: A-Za-z0-9_.

Вторым параметром, .replace может принимать функцию подстановки, параметрами, которой являются найденные подстроки и указанные группы.

Функция может выглядеть так:

function(_, $1) { // первый параметр не важен, во втором приходит содержимое группы, а именно "class" или "text" из примера, без #
  return obj[$1] || $1; // если есть поле в объекте возвращаем значение, иначе оставляем как есть
}

Пример в сборе:

var html = '<span class = "#class">#text</span>'; 
var obj = { 
  class: 'class1', 
  text: 'Span Text' 
}; 
 
console.log(html.replace(/#(\w+)/g, function(_, $1) { 
  return obj[$1] || $1; 
}))

READ ALSO
Как привязать объекты к responsive изображению?

Как привязать объекты к responsive изображению?

Как привязать объекты к responsive изображению? К примеру: У меня есть карта 2500x3000px, на ней изображены островаЕсть спрайт человечка с номером команды...

169
Passay с несколькими языками

Passay с несколькими языками

Использую бибилиотеку passay, для проверки паролей в веб-проекте на spring bootКак добавить кастомный файл с локализацией разобрался

136
Routes и Router - как правильно настроить (Vue.js/Node.js)?

Routes и Router - как правильно настроить (Vue.js/Node.js)?

У меня на фронте используется VueТам я настроил vue-router, чтоб по конкретным запросам отдавать соответствующие страницы

184