замена определенного слова тегом

#javascript

#javascript

Вопрос:

Ниже у меня есть строка с некоторыми словами внутри фигурной скобки, я хочу извлечь слова и сделать их в виде массива

ввод:

  let string = 'Hello John n, the time is ${time} and its ${day} of ${month} ${year}'
  

вывод:

 let keys = ["time", "day", "month", "year"]
  

каков правильный подход к регулярному выражению для его достижения.

И как я могу заменить строку входными тегами, как показано ниже.

   let string = 'Hello John n, the time is <input name='time' /> and its <input name='day' /> of <input name='month' /> <input name='year' />'
  

Комментарии:

1. Совет: replace() может принимать функцию в качестве аргумента подстановки.

2. @tadman но replace может сделать .replace(‘text’, ‘newText’), но как я могу .replace(‘${?}’) динамические вещи

3. Функцией вместо строки. Посмотрите на примеры MDN. Есть несколько подобных.

Ответ №1:

Вы могли бы захватить все совпадающие группы

 const string = 'Hello John n, the time is ${time} and its ${day} of ${month} ${year}'
const regex = /${(w )}/g
const res = [];
let matches

while (matches = regex.exec(string)) {
  res.push(matches[1]);
}

console.log(res)  

И о замене, сделайте строку .replace с измененной разделенной группой, используя знак доллара ( $ ) с порядком захваченной группы (индекс на основе 1)

 const string = 'Hello John n, the time is ${time} and its ${day} of ${month} ${year}'
const res = string.replace(/${(w )}/g, '<input name="$1"/>')

console.log(res)