每行一个html标记的正则表达式

时间:2011-06-30 05:43:59

标签: ruby regex

出于某种原因,每行必须有一个HTML标记。因此,如果以下是输入:

<p><div class="class1 <%= "class3" %>class2">div content</div></p>

输出应为:

<p>
<div class="class1 <%= "class3" %>class2">div content
</div>
</p>

正则表达式应该能够识别erb脚本标记和HTML标记之间的区别。不需要缩进。

如何通过正则表达式来完成?

2 个答案:

答案 0 :(得分:3)

您可以将(?=<[\w/])替换为\n。这是一个与<符号前面的位置匹配的外观,后跟字母或斜杠。 (另一种选择是(?=<(?!%)))。

这适用于您发布的代码,但在很多场景中失败,在属性中名义上为<,在服务器端脚本和JavaScript块中为<。如果你需要更复杂的东西,你可能需要一个更强大的解决方案,比如erb解析器。

答案 1 :(得分:1)

"(?<!%)>\s*<(?=!%))"替换为">\n<",并将"(?<!(\s|^))</"替换为"\n</"

这可确保在%之前或之后找不到>whitespace<。 然后总是打破</

我认为kobi的答案更好:)