使用 flexmark-java 清理 markdown

Use flexmark-java to clean markdown

在 Java 应用程序中,我需要将标记的文本转换为简单的纯文本而不是 html(例如删除所有链接地址、粗体和斜体标记)。

哪种方法最好?我在考虑使用像 fleaxmark 这样的降价库。但是我第一眼找不到这个功能。它在那里吗?还有其他更好的选择吗?

编辑

Commonmark 通过使用 org.commonmark.renderer.text.TextContentRenderer 而不是默认的 HTML 渲染器支持渲染到文本。不确定它对换行符有何作用,但值得一试。

原始答案,使用 flexmark HTML + JSoup


理想的解决方案是为 flexmark 实现自定义渲染器,但这会迫使您为 markdown 中的所有语言功能编写 model-to-string。除非它支持开箱即用,但我不知道这个功能...

一个更简单的解决方案可能是使用 flexmark(或任何其他轻量级降价渲染器)并让它创建 HTML。之后,只需 运行 通过 https://jsoup.org/ 生成的 HTML 并让它提取文本:

Jsoup.parse(htmlInputStream).text();

String org.jsoup.nodes.Element.text() Gets the combined text of this element and all its children. Whitespace is normalized and trimmed.

For example, given HTML <p>Hello <b>there</b> now! </p>, p.text() returns Hello there now!

在使用 org.owasp.html.HtmlSanitizer.

进行清理后,我们使用这种方法获取在富内容编辑器 (summernote) 中输入的文本的 "preview"