【发布时间】:2020-11-27 06:49:22
【问题描述】:
我在试图找出这个正则表达式代码时遇到问题。让我展示一下代码,然后再解释一下。
<div class="test">
Nisl rhoncus mattis rhoncus urna neque viverra. Senectus et netus et
malesuada.
<button class="button">Feugiat nisl pretium fusce id velit.</button>
Turpis nunc eget lorem dolor sed viverra ipsum nunc. Gravida dictum
fusce ut placerat. Viverra maecenas accumsan lacus vel facilisis.
</div>
所以我试图让正则表达式介于 > 和 <button class="button">Feugiat nisl pretium fusce id velit.</button>
所以正则表达式应该解析这个并只返回这些行:
Nisl rhoncus mattis rhoncus urna neque viverra。 Senectus et netus et malesuada。
Turpis nunc eget lorem dolor sed viverra ipsum nunc。 Gravida dictum fusce ut placerat。 Viverra maecenas accumsan lacus vel facilisis。
还因为它将用于解析 HTML,我需要它来忽略完全空白的空间。我的意思是
</div>
</div>
从技术上讲,两者之间的空格是有效的,但我不想捕获空格,除非包含文本而不仅仅是空格。想象一下在 HTML 之间获取段落。这个想法是获取 divs 之间的所有文本,然后用 <p> 包裹它,但是某些情况下,例如按钮,里面不应该有 <p>。
我不确定这是否可能。我希望这是有道理的,任何帮助都将不胜感激!
编辑:
使用 NodeJS
我正在尝试将 MD 文件(Github 降价文件)解析为 HTML,并在自定义语法之间有一个中间步骤,如下所示:
[flipcard]
[front color:blue]
Morbi tristique senectus et netus et malesuada. Interdum consectetur libero id faucibus nisl tincidunt. Purus faucibus ornare suspendisse sed nisi. Laoreet id donec ultrices tincidunt arcu. Elementum pulvinar etiam non quam lacus suspendisse faucibus.
[/front]
[back]
Nisl rhoncus mattis rhoncus urna neque viverra. Senectus et netus et malesuada.
[button]Feugiat nisl pretium fusce id velit.[/button] Turpis nunc eget lorem dolor sed viverra ipsum nunc. Gravida dictum fusce ut placerat. Viverra maecenas accumsan lacus vel facilisis. Nascetur ridiculus mus mauris vitae ultricies leo integer. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus. Velit laoreet id donec ultrices.[/back]
[/flipcard]
它几乎就像自定义 HTML,但在 markdown 文件中,然后将使用我的自定义解析器转换为这个,一旦我的解析器完成,我通过 NodeJS Marked 解析器运行它以捕获剩余的 markdown 元素。然后我得到这个:
<div class="flipcard">
<div class="front" style="color: blue">
Morbi tristique senectus et netus et malesuada. Interdum consectetur
libero id faucibus nisl tincidunt. Purus faucibus ornare suspendisse sed
nisi. Laoreet id donec ultrices tincidunt arcu. Elementum pulvinar etiam
non quam lacus suspendisse faucibus.
</div>
<div class="back">
Nisl rhoncus mattis rhoncus urna neque viverra. Senectus et netus et
malesuada.
<button class="button">Feugiat nisl pretium fusce id velit.</button>
Turpis nunc eget lorem dolor sed viverra ipsum nunc. Gravida dictum
fusce ut placerat. Viverra maecenas accumsan lacus vel facilisis.
Nascetur ridiculus mus mauris vitae ultricies leo integer. Pellentesque
pulvinar pellentesque habitant morbi tristique senectus et netus. Velit
laoreet id donec ultrices.
</div>
</div>
这非常接近我的需要,但我需要最终输出是这样的:
<div class="flipcard">
<div class="front" style="color: blue">
<p>
Morbi tristique senectus et netus et malesuada. Interdum consectetur
libero id faucibus nisl tincidunt. Purus faucibus ornare suspendisse
sed nisi. Laoreet id donec ultrices tincidunt arcu. Elementum pulvinar
etiam non quam lacus suspendisse faucibus.
</p>
</div>
<div class="back">
<p>
Nisl rhoncus mattis rhoncus urna neque viverra. Senectus et netus et
malesuada.
</p>
<button class="button">Feugiat nisl pretium fusce id velit.</button>
<p>
Turpis nunc eget lorem dolor sed viverra ipsum nunc. Gravida dictum
fusce ut placerat. Viverra maecenas accumsan lacus vel facilisis.
Nascetur ridiculus mus mauris vitae ultricies leo integer.
Pellentesque pulvinar pellentesque habitant morbi tristique senectus
et netus. Velit laoreet id donec ultrices.
</p>
</div>
</div>
【问题讨论】:
-
不要使用正则表达式解析 HTML。正则表达式是我们根本无法解析 HTML。使用 HTML 解析器。
-
您对 html 解析器有什么建议吗?我为 NodeJS 尝试了 html-parser,但它没有用。我这样做的原因是我在 MD 文件中有自定义内容,例如 [front] [/front]。所以我运行我的自定义解析器来获取所有这些元素而不是 MD 解析器到 HTML,但是 p 标签不太正确,需要在上面的特定位置删除和重新添加。
-
这是问题中需要的所有有价值的信息:您正在使用节点,您已经尝试过解析器,哪个,您尝试了什么代码,什么“不起作用”表示,什么是“MD”文件,以及这些文件的示例,所需输出的示例。
-
谢谢。我用所有信息更新了它,最终输出需要什么以及我为什么要尝试以这种方式实现这一目标。
-
好的,所以你几乎用解析器解决了所有问题,你只需要在
div.flipcard > d的文本中换行<p>?
标签: javascript html node.js regex