javascript - 如何将 Markdown 解析为 AST,对其进行操作,然后将其写回 Markdown?

标签 javascript markdown abstract-syntax-tree

我想以编程方式修改 Markdown 文件。
我一直在研究 Markdown 解析器并尝试了其中一些;即 Marked、Markdown-it 和 Commonmark。他们提供对 AST 的访问权限,这使我可以轻松地修改内容。
问题是它们仅呈现为 HTML。我找不到任何关于渲染回 Markdown 的信息。
我现在看到两个选项,要么为其中一个库编写自定义渲染器(这将非常耗时),要么使用将 HTML 转换回 Markdown 的单独工具。
有没有更简单的选择?为什么 Markdown 解析器只能呈现为 HTML?

最佳答案

最好的选择是您一开始就想做的事情!
有许多 Markdown 解析器可以生成 AST,其中很多可以将其渲染回 Markdown!

And why would a Markdown parser only render to HTML?


并非所有人都这样做的原因是因为 Markdown 的第一大用途是作为 HTML 的源代码。 Markdown 甚至一开始就是为此而设计的。因此,Markdown 解析器最常见的用途,包括人们想要首先操作 AST 的情况,就是输出 HTML。
也就是说,真正好的库包括呈现为其他格式的选项,包括返回 Markdown。
以下是我已经知道可以执行此操作的库:
Pandoc
可能是世界上排名第一的 Markdown 工具包。 Pandoc 的母语是 Haskell,但有 Javascript 包装器(只需搜索 npm)。如果你打算在路上做很多 Markdown 的东西,无论如何,在 Pandoc 中变得有知识可能是有意义的。
它支持filters "都是关于 AST 操作的。它特别支持 Lua 和 Lua filters ,这可能是最容易编码的,但你也可以 write filters in other languages :Python、PHP、Perl、Javascript/Typescript、Groovy、Ruby。
它支持渲染器到 Markdown,以及大量其他格式。
它的解析器和渲染器有许多其他选项,可以使您的工作更加轻松,或者可能已经完全按照您的意愿行事。人们编写的许多过滤器可能已经可以满足您的需求。
CMark
虽然 CommonMark 的这个引用实现是用 C 语言编写的,但是有很多 Node wrappers .甚至还有一个使用 Emscripten 的 JavaScript 端口。它移植了 GitHub 扩展,因此表格和其他 GFM 事物也可以在 AST 中进行操作。
它可以输出 CommonMark,以及 HTML 和 LaTeX,甚至是 AST 的 XML 表示。
remark
一个专门围绕 AST 操作设计的基于 Javascript 的框架。我从未使用过它,但它可能具有使 AST 操作更容易的工具,尽管我只是在猜测。

关于javascript - 如何将 Markdown 解析为 AST,对其进行操作,然后将其写回 Markdown?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67797326/

相关文章:

markdown - 支持 lektor 中的 RST 标记?

parsing - 基于层数的递归解析

compiler-construction - OCaml 中 S 表达式树到抽象语法树

javascript - 如何合并 Bower 依赖项

javascript - 如何在 javaScript 中获取动态 div 宽度

javascript - 在 iCheck 复选框上检测 Shift 键 + 单击事件

javascript - 有哪些工具可以解析 Javascript 并读取 Javascript 或 Ruby 的结果?

javascript - Highcharts 中的数据不按顺序排列

Rstudio中的R找不到rmarkdown包

markdown - 如何在markdown中的列表项之间添加空格?