匹配规则#
在编辑Markdown时,特别是在页面渲染应用场景下,数学公式往往需要特定的转义定界符,这里我列出了一些常用定界符的正则表达式,以实现快速的批量匹配:
- 行内公式
\(...\):
(?<!\\)\\\((.*?)(?<!\\)\\\)
\\(...\\):
(?<!\\)\\\\\((.*?)(?<!\\)\\\\\)
$...$:
(?<!\$)\$(?!\$)(.*?)(?<!\$)\$(?!\$)
- 行间公式
\[...\]:
(?<!\\)\\\[\n(.*?)\n(?<!\\)\\\]
\\[...\\]:
(?<!\\)\\\\\[\n(.*?)\n(?<!\\)\\\\\]
$$...$$:
(?<!\$)\$\$(?!\$)\n(.*?)\n(?<!\$)\$\$(?!\$)
\begin{equation}...\end{equation}
(?<!\\)\\begin{equation}\n(.*?)\n(?<!\\)\\end{equation}
这里使用负向回顾断言((?<!\\)、(?<!\$))和负向前瞻断言((?!\\\$、(?!\$)来避免分隔符之间的冲突(例如,$...$ 与 $$...$$)。对于行间公式,加入了换行符\n,如果不需要可以删去。
替换规则#
匹配完成后常常需要替换,使用基本的逻辑即可,列出如下:
\(...\):
\\\($1\\\)
\\(...\\):
\\\\($1\\\\)
$...$:
$$$1$$
\[...\]:
\\[\n$\n1\\]
\\[...\\]:
\\\\[\n$1\n\\\\]
$$...$$:
$$$$\n$1\n$$$$
\begin{equation}...\end{equation}
\begin{equation}\n$1\n\end{equation}
