在 Node.js 中处理 Markdown:用于解析和转换的库
Markdown 是一种轻量级标记语言,广泛用于文档、README 文件、博客和内容管理系统中的文本格式化。在 Node.js 生态系统中,有几个强大的库可以解析 Markdown 并将其转换为 HTML,以及执行反向操作。在本文中,我们将介绍三种最流行的工具:marked、showdown 和 remarkable,以及它们的特点、API 和使用示例。
1. marked 库
marked 是一个快速且轻量级的 Markdown 解析器,支持所有主要的语法元素(标题、列表、链接、图片、代码、表格等)。它具有高性能和易于配置的特点。
安装
npm install marked基本用法
要将 Markdown 字符串转换为 HTML,只需调用 marked() 函数:
const marked = require('marked');
const markdownText = `# 你好,世界!
这是 **粗体文本** 和 *斜体*。
- 列表项 1- 列表项 2
[链接到 PythonLib](https://pythonlib.ru)`;
const html = marked(markdownText);console.log(html);执行结果:
<h1>你好,世界!</h1><p>这是 <strong>粗体文本</strong> 和 <em>斜体</em>。</p><ul><li>列表项 1</li><li>列表项 2</li></ul><p><a href="https://pythonlib.ru">链接到 PythonLib</a></p>选项配置
marked 支持多种选项来自定义输出:
const marked = require('marked');
marked.setOptions({ breaks: true, // 将换行符转换为 <br> gfm: true, // 启用 GitHub 风格的 Markdown(表格、删除线等) headerIds: false, // 不为标题添加 ID mangle: false, // 不转义电子邮件地址 sanitize: false // 不删除 HTML 标签(危险,请谨慎使用)});
const html = marked('第1行第2行');console.log(html); // 输出中行之间包含 <br>同步和异步使用
默认情况下,marked() 是同步工作的,但也通过 Promise 支持异步模式:
const marked = require('marked');
async function convertMarkdown(text) { const html = await marked.parse(text); return html;}
convertMarkdown('# 标题').then(console.log);2. showdown 库
showdown 是另一个流行的 Markdown 解析器,既可以在浏览器中运行,也可以在 Node.js 中运行。它提供了可扩展的 API,并支持多种扩展。
安装
npm install showdown基本用法
创建一个转换器实例并调用 makeHtml() 方法:
const showdown = require('showdown');const converter = new showdown.Converter();
const markdownText = '## 副标题
带有 **强调** 的普通文本。';const html = converter.makeHtml(markdownText);console.log(html);结果:
<h2>副标题</h2><p>带有 <strong>强调</strong> 的普通文本。</p>扩展和自定义
showdown 允许添加自定义扩展,例如支持表情符号或 LaTeX 公式:
const showdown = require('showdown');
// 创建一个将 :smile: 替换为表情符号的扩展const emojiExtension = function() { return [{ type: 'lang', regex: /:smile:/g, replace: '😊' }];};