Я написал парсер HTML на JavaScript, где он принимает строку, представляющую HTML
const html =
`<div>
<div>
foo
</div>
<div>
bar
</div>
</div>`
И он должен выводить такой объект
{
children: [
{ children: ['foo'], value: 'div' },
{ children: ['bar'], value: 'div' },
],
value: 'div',
}
вот моя попытка
function parser(html) {
const tokens = html.split('n')
const stack = []
tokens.forEach((token) => {
if (token === '</div>') {
const children = []
while (stack[stack.length - 1] !== '<div>') {
children.unshift(stack.pop())
}
stack.pop()
stack.push({
children,
value: 'div',
})
} else {
stack.push(token)
}
})
return stack.pop()
}
Мои вопросы:
- Как я могу изменить код, чтобы его можно было легко расширить для других тегов HTML
body
,div
,span
и Т. Д. - Сейчас необходимая HTML-строка должна быть действительной. Как я могу изменить код, чтобы он мог обнаруживать недопустимый HTML
- Прямо сейчас в HTML-строке нет отступов. Как я могу изменить код, чтобы он мог допускать отступы во входных строках?