Парсинг строки в массив JS
Как можно из строки, например - let str = "привет <a href="#" target="_blank">*любая ссылка*</a> пока" сформировать массив. Пробовал метод split, где в параметр передавал регулярку, но строка парсилась неверно. Нужно, чтобы массив формировался отдельно словами и DOM-узлами. Конкретно DOM- узел должен быть <a></a>.Есть идеи? Спасибо
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Как вам уже заметили в комментариях, парсить HTML регулярками считается ненадёжным.
Если не посчитаете это чрезмерным средством, можно воспользоваться DOMParser:
let str = 'привет <a href="#" target="_blank">*любая ссылка*</a> пока';
const doc = new DOMParser().parseFromString(str, 'text/html');
const nodes = [...doc.body.childNodes]
.map(node => node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.outerHTML);
console.log(nodes);
Если уж так необходимо решать при помощи регулярок, можно рискнуть так:
let str = 'привет <a href="#" target="_blank">*любая ссылка*</a> пока';
const nodes = str.split(/(?=<\w)|(?<=<\/\w+>)/);
console.log(nodes);