【发布时间】:2018-11-22 11:58:42
【问题描述】:
我正在尝试将 HTML 文件拆分为一组标签,目标是我将预先添加并附加 ANSI 转义码以根据标签为每一行着色,然后吐到控制台,它将是颜色编码。
到目前为止,我能够使用正则表达式逐个提取每个标签(显然是个坏主意),然后我的想法是找到该标签的索引并添加/附加转义码,但我遇到的问题是多个看起来相同的标签,就像两个相邻的 div。
循环标签的代码
var htmlTagRe = /<\/?[\w\s="/.':;#-\/]+>/gi;
const innerHTMLarr = text.match(htmlTagRe).reduce((prev, next) => {
console.log('prev', prev)
console.log('next', next)
console.log()
return next
});
然而,这只会吐出以下内容,并错过像<img />这样的自我封闭标签:
prev <html>
next <body>
prev <body>
next <div>
prev <div>
next </div>
prev </div>
next <p>
prev <p>
next </p>
prev </p>
next <p>
prev <p>
next </p>
prev </p>
next <div style="border: 1px solid red">
prev <div style="border: 1px solid red">
next <p>
prev <p>
next </p>
prev </p>
next <span>
prev <span>
next </span>
prev </span>
next </a>
prev </a>
next </div>
prev </div>
next </body>
prev </body>
next </html>
html 文件
<html>
<body>
<div>text</div>
<p>a paragraph</p>
<p>a paragraph</p>
<div style="border: 1px solid red">
<p>another one</p><span>test</span>
<a href="http://google.com">
<img href="http://site/img.jpg" />
</a>
</div>
</body>
</html>
期望的输出
[
'<html>',
'<body>',
'<div>text</div>',
'<p>a paragraph</p>',
'<p>a paragraph</p>',
'<div style="border: 1px solid red">',
'<p>another one</p>',
'<span>test</span>',
'<a href="http://google.com">',
'<img href="http://site/img.jpg" />',
'</a>',
'</div>',
'</body>',
'</html>',
]
【问题讨论】:
-
@MatthewCliatt 我已经看过那个帖子,它没有回答我的问题。我已经知道使用正则表达式不好。
-
如果您看过这篇文章,那么您应该知道使用正则表达式解析 HTML 非常糟糕,您不应该在这里发布有关它的问题。这就是帖子保持原样的原因。
-
请注意,
<img>标记不需要或使用右斜线,而且从来没有。 -
标签: javascript html arrays string