匹配规则#
在编辑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}