出于某种原因,每行必须有一个HTML标记。因此,如果以下是输入:
<p><div class="class1 <%= "class3" %>class2">div content</div></p>
输出应为:
<p>
<div class="class1 <%= "class3" %>class2">div content
</div>
</p>
正则表达式应该能够识别erb脚本标记和HTML标记之间的区别。不需要缩进。
如何通过正则表达式来完成?
答案 0 :(得分:3)
您可以将(?=<[\w/])
替换为\n
。这是一个与<
符号前面的位置匹配的外观,后跟字母或斜杠。 (另一种选择是(?=<(?!%))
)。
这适用于您发布的代码,但在很多场景中失败,在属性中名义上为<
,在服务器端脚本和JavaScript块中为<
。如果你需要更复杂的东西,你可能需要一个更强大的解决方案,比如erb解析器。
答案 1 :(得分:1)
将"(?<!%)>\s*<(?=!%))"
替换为">\n<"
,并将"(?<!(\s|^))</"
替换为"\n</"
这可确保在%
之前或之后找不到>whitespace<
。
然后总是打破</
我认为kobi的答案更好:)