const string= 'use String Template'
`To ${string}, or not to ${string}, that is the question!`
Посмотрим правде в глаза, если вы занимаетесь программированием разработчика в 2019 году, вы, должно быть, использовали String Templating где-то в своей кодовой базе. Это мощная и полезная функция для современной веб-разработки. Есть много статей, в которых показано, как его использовать. Но этот ныряет немного глубже.
Давайте возьмем типичный вариант использования и попробуем сделать его лучше. Предположим, у вас есть что-то вроде этого.
const var1 = 'Alice'
const var2 = 'Bob'
const conString = `${var1} is trying to send a message to ${var2}`
Здесь, чтобы удовлетворить conString, необходимо объявить var1 и var2 до того, как вы попытаетесь заполнить строку.
Теперь предположим, что вы хотите хранить все свои шаблоны в каком-то месте отдельно от вашей кодовой базы. Чтобы решить эту проблему, давайте посмотрим на это
const template = "${var1} is trying to send a message to ${var2}"
const var1 = 'Alice'
const var2 = 'Bob'
const conString = fillStrTemplate(template, { var1, var2 })
const fillStrTemplate = (templateString, templateVars) => {
return new Function("return `" + templateString + "`;")
.call(templateVars);
}
Здесь волшебство происходит в этой строке
new Function("return `" + templateString + "`;").call(templateVars);
Если мы деконструируем эту функцию, она будет выглядеть так
(var1, var2) => {
return `${var1} is trying to send a message to ${var2}`
}
var1 и var2 определяются до популяции. Итак, теперь мы можем определить шаблон в любом месте нашей кодовой базы и заполнить этот шаблон его переменной где угодно, используя простую функцию fillStrTemplate ()

Итак, теперь, естественно, в нашей голове возникает следующий вопрос: как извлечь переменную из уже заполненного шаблона,
Возьмем пример. Предположим, у вас есть шаблон
const template = `${var1} and ${var2} are mutual friend of ${var3}`
который используется для создания двух строк типа
Alice and Bob are mutual friend of Emily Emily and Steve are mutual friend of John
Теперь мы хотим извлечь переменные из заполненных строк. Здесь в игру вступает RegEx. Но сначала мы должны проверить строку этого шаблона.
RegEx «. *?» может использоваться в качестве заполнителя для переменной, поэтому, если у вас есть регулярное выражение, например
.*? and .*? are mutual friend of .*?
Он будет соответствовать этим строкам, поэтому вы можете узнать, какой шаблон используется для создания этих строк.
"Emily and Steve are mutual friend of John"
.match(".*? and .*? are mutual friend of .*?") = true
Теперь для извлечения мы используем RegEx «(. +)». Это группа захвата, мы используем ее с RegExp (regex) .exec (value) для получения переменных,
Предположим, вы хотите извлечь все переменные из строк, которые мы создаем в нашем RegEx, например
(.+) and (.+) are mutual friend of (.+)?
и примените это к нашей строке, вот пример кода
const extracts=
new RegExp("(.+) and (.+) are mutual friend of (.+)")
.exec("Alice and Bob are mutual friend of Emily");
экстракты будут выглядеть как
[ “Alice and Bob are mutual friend of Emily”, “Alice”, “Bob”, “Emily” ]
Эта магия Simple RegEx очень полезна во многих случаях, таких как анализ журнала ошибок, извлечение OTP. Повеселись….
