Я пытаюсь создать шаблон регулярного выражения для соответствия тегам "faux" html для небольшого приложения, которое я создаю.
Я создал регулярное выражение для захвата найденных совпадений в {tag}brackets{/tag}
и вывода их в массив объектов, таких как:
{
{key : value},
{key : value}
}
Код с текущим шаблоном:
let str = "{p}This is a paragraph{/p} {img}(path/to/image) {ul}{li}This is a list item{/li}{li}Another list item{/li}{/ul}";
let regex = /\{(\w+)}(?:\()?([^\{\)]+)(?:\{\/1})?/g;
let match;
let matches = [];
while (match = regex.exec(str)) {
matches.push({ [match[1]]: match[2]})
}
console.log(matches)
Ссылка на JSbin
Я понял, что мне нужен также шаблон для захвата вложенных групп и помещения их в массив- так что результат для вышеупомянутого string
будет:
[
{p : "This is a paragraph"},
{img : "path/to/image"},
{ul : ["This is a list item", "Another List item"]}
]
Идея здесь состоит в том, чтобы сопоставлять каждый тег по порядку, чтобы индексы массива соответствовали порядку, в котором они были найдены (т.е. первый абзацв приведенной выше строке есть array[0]
и т. д.).
Если у кого-то есть немного информации о том, как я мог бы структурировать шаблон, это было бы очень полезно.У меня не будет более 1 уровня глубокого вложения, если это что-то изменит.
Я могу использовать другую разметку для ul
, если это поможет, однако я не могу использовать квадратные скобки [text]
из-за конфликтов с другой функцией, которая генерирует текст, который я пытаюсь извлечь в этомшаг.
Редактировать: Идея, которая меня поразила, состоит в том, чтобы иметь третью группу захвата для захвата и передачи в список-массив, но я не уверен, сработает ли это на самом деле?Я до сих пор не заставил его работать