在前端开发中,经常需要解析 markdown 文本,markdown-it-replacements 是一个 npm 包,它基于 markdown-it ,提供丰富的常用语法替换和自定义替换功能。这篇文章将介绍如何使用 markdown-it-replacements 包,并且将介绍一些使用技巧和注意事项。
什么是 markdown-it-replacements?
markdown-it-replacements 是一个 Node.js、JavaScript 的 markdown parser,它基于 markdown-it,默认提供了丰富的常用语法替换和自定义替换功能。几乎可以覆盖开发中所有 markdown 语法的需求,同时也支持自定义的替换逻辑,使用灵活。
基本用法
安装
首先,我们需要在项目中安装 markdown-it-replacements 包,可以通过以下命令进行安装:
npm install markdown-it-replacements
使用
安装完成后,我们可以在项目中引入 markdown-it-replacements 包,示例代码如下:
const markdown = require('markdown-it')(); const markdownItReplacements = require('markdown-it-replacements'); markdown.use(markdownItReplacements);
通过以上代码,我们就可以使用 markdown-it-replacements 提供的特性了。
markdown-it-replacements 默认提供了以下替换类别:
- Emoji:这里面有很多表情符号和图标可以用
- Typographer:自动将英文引号替换成中文引号
- Math:可以解析 LaTeX 数学表达式
- Subscript:支持下标
- Superscript:支持上标
- Anchor:自动生成锚点链接
下面我们分别对每个类别的使用方法作简单介绍。
Emoji
markdown-it-replacements 提供了丰富的 emoji 和图片等,可以通过以下代码启用:
markdown.use(markdownItReplacements, { replacements: { emoji: require('markdown-it-replacements/lib/emoji') } });
使用 emoji 有两种格式:
对于一个 emoji,如 :heart:,可以直接使用这个标识符,markdown-it-replacements 会根据这个标识符自动替换成相应的 emoji。
我很喜欢这个 :heart:。
运行后会被替换成:
我很喜欢这个 ❤️。
图片格式:
我很喜欢这个 ![:heart:](https://cdn.jsdelivr.net/npm/emoji-unicode/assets/png/2764.png)。
运行后会被替换成:
我很喜欢这个 <img class="emoji" title=":heart:" alt="❤️" src="https://cdn.jsdelivr.net/npm/emoji-unicode/assets/png/2764.png" height="20" width="20">。
Typographer
Typographer 可以将英文引号替换成中文引号,用法示例:
markdown.use(markdownItReplacements, { replacements: { typographer: { quotes: '“”‘’' } } });
这是一句话,"引号"会被转换为中文引号。
运行后会被替换成:
这是一句话,“引号”会被转换为中文引号。
Math
Math 可以解析 LaTeX 数学表达式。我们需要在 markdown-it 配置中添加 math 类型即可启用:
markdown.use(markdownItReplacements, { replacements: { math: require('markdown-it-replacements/lib/math') } });
这是一个内联公式:$a^2 + b^2 = c^2$,这是一个块状公式:$$ E = mc^2 $$
运行后会被替换成:
这是一个内联公式:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>=</mo><msup><mi>c</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">a^2 + b^2 = c^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.672ex;"></span><span class="mord mathdefault">a</span><sup class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="pstrut" style="height:0.37em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathrm">2</span></span></span></span></span></sup><span class="mord mathdefault">+</span><span class="mord mathdefault">b</span><sup class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="pstrut" style="height:0.6888888889em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathrm">2</span></span></span></span></span></sup><span class="mrel">=</span><span class="mord mathdefault">c</span><sup class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="pstrut" style="height:0.37em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathrm">2</span></span></span></span></span></sup></span></span></span>,这是一个块状公式:<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi><mo>=</mo><mi>m</mi><msup><mi>c</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">E = mc^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.852ex;"></span><span class="mord mathdefault">E</span><span class="mrel">=</span><span class="mord mathdefault">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="pstrut" style="height:0.585ex;"></span><sup><span class="reset-textstyle scriptstyle"><span class="mord mathdefault">2</span></span></sup></span></span></span><span class="mathspace"></span><span class="mord mathdefault">c</span><sup class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist"><span class="pstrut" style="height:0.971ex;"></span><sup><span class="reset-textstyle scriptstyle"><span class="mord mathdefault">2</span></span></sup></span></span></span></sup></span></span></span>
Subscript
Subscript 可以使文本出现下标,用法示例:
markdown.use(markdownItReplacements, { replacements: { subscript: require('markdown-it-replacements/lib/subscript') } });
H<sub>2</sub>O 是水的化学式。
运行后会被替换成:
H<sub>2</sub>O 是水的化学式。
Superscript
Superscript 可以使文本出现上标,用法示例:
markdown.use(markdownItReplacements, { replacements: { superscript: require('markdown-it-replacements/lib/superscript') } });
2<sup>10</sup> 表示十进制数 1024。
运行后会被替换成:
2<sup>10</sup> 表示十进制数 1024。
Anchor
Anchor 可以自动生成锚点链接,用法示例:
markdown.use(markdownItReplacements, { replacements: { anchor: require('markdown-it-replacements/lib/anchor') } });
# 标题 这是一句话,可以通过“[标题](#标题)”跳转到标题处。
运行后会被替换成:
<h1 id="标题"><a class="anchor" href="#标题" aria-hidden="true">§</a> 标题</h1> 这是一句话,可以通过“<a href="#标题">标题</a>”跳转到标题处。
自定义替换
除了以上默认提供的替换外,markdown-it-replacements 还支持自定义替换。比如我们可以自定义一种格式,把左右括号内的文本用有序列表包含,示例代码如下:
markdown.use(markdownItReplacements, { replacements: { customReplace: function (content) { return content.replace(/\((\S+)\)/g, '<ol><li>$1</li></ol>'); } } });
这是一个列表 (第一项),(第二项),(第三项)。
运行后会被替换成:
这是一个列表 <ol><li>第一项</li><li>第二项</li><li>第三项</li></ol>。
结语
markdown-it-replacements 在解析 markdown 文件时,提供了丰富的常用语法替换和自定义替换功能,可以大大减少工作量。上面介绍的方法只是其中的冰山一角,我们可以针对不同的情况使用相应的替换方式。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600557e881e8991b448d4f8a