跳过正文

基于正则表达式统一匹配替换多格式数学公式定界符

·259 字·1 分钟
Che
作者
Che
仅仅是个普通人
目录

匹配规则
#

在编辑Markdown时,特别是在页面渲染应用场景下,数学公式往往需要特定的转义定界符,这里我列出了一些常用定界符的正则表达式,以实现快速的批量匹配:

  1. 行内公式
  • \(...\):
(?<!\\)\\\((.*?)(?<!\\)\\\)
  • \\(...\\):
(?<!\\)\\\\\((.*?)(?<!\\)\\\\\)
  • $...$:
(?<!\$)\$(?!\$)(.*?)(?<!\$)\$(?!\$)
  1. 行间公式
  • \[...\]:
(?<!\\)\\\[\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}