问题:有没有一种聪明的方法可以将纯文本列表解析为 HTML?
或者,我们必须求助于深奥的递归方法,还是纯粹的蛮力?
我一直在想这个有一段时间了。在我自己的沉思中,我一次又一次地回到蛮力和奇怪的递归方法……但它似乎总是那么笨拙。应该有更好的方法吧?
那么聪明的方法是什么?
假设
有必要设置一个场景,所以这些是我的假设。
列表可以嵌套 3 层深(至少),无序或有序列表。列表类型和深度由其前缀控制:
- 前缀后面有一个必填空格。
- 列表深度由前缀中有多少非空格字符控制;
*****
将嵌套五个列表深。 - 列表类型由字符类型强制执行,
*
或者-
为无序列表,#
为无序列表。
项目仅由 1 个
\n
字符分隔。(让我们假设两个连续的换行符符合一个“组”、一个段落、div 或其他一些 HTML 标记,如 Markdown 或 Textile。)列表类型可以自由混合。
输出应为有效的 HTML 4,最好以
</li>
s结尾可以根据需要使用或不使用 Regex 进行解析。
示例标记
* List
*# List
** List
**# List
** List
# List
#* List
## List
##* List
## List
期望的输出
为便于阅读而进行了一些分解,但它应该是一个有效的变体(请记住,我只是很好地间隔了它!):
<ul>
<li>List</li>
<li>
<ol><li>list</li></ol>
<ul><li>List</li></ul>
</li>
<li>List</li>
<li>
<ol><li>List</li></ol>
</li>
<li>List</li>
</ul>
<ol>
<li>List</li>
<li>
<ul><li>list</li></ul>
<ol><li>List</li></ol>
</li>
<li>List</li>
<li>
<ul><li>List</li></ul>
</li>
<li>List</li>
</ol>
总之
你是怎么做到的?我真的很想了解处理不可预测的递归列表的好方法,因为它让我觉得任何人都可以纠缠不清。