使用 Javascript 在网页中查找 LaTex 指令的正则表达式

zou*_*yjs 5 javascript regex latex mathjax

我需要替换网页中的 LaTex 指令。LaTex 指令包含在两个“$”符号中,类似于 $a^2+b^2=1$(内联公式)或 $$a^2+b^2=1$$(块公式,它将显示在新行中)。现在的问题是我想使用 Javascript 将这些指令替换为一些图片(对应于这些指令),因为浏览器本身显然无法以 LaTex 样式显示这些公式。(见图)a^2+b^2=1如何使用正则表达式来做到这一点?我在下面展示了我的工作,但存在一些问题。对于内联公式,我使用:

var reg = /\$([^$]|(\\$))*\$(?=[^$])/mg
Run Code Online (Sandbox Code Playgroud)

这意味着我想要一些文本以 $ 开头,之后无论是“不是 $”还是“\$”或什么都没有,并以“$”结尾,但在结束之后将不允许 $ 的上升。听起来不错..但是对于像这样的文本:$a^2\$b^2$ 显然,我希望它会显示为(见图)a^2\$b^2,但事实是正则表达式仅替换了一部分它就像“*replaced*b^2$”。我需要帮助~~

HBP*_*HBP 2

以下正则表达式

/(\${1,2})((?:\\.|.)*)\1/
Run Code Online (Sandbox Code Playgroud)

将匹配以单美元或双美元封闭的 LaTex 块。请注意使用反向引用 \1 来匹配开始标记。

如果 LaTex 块可以延伸超过线边界,则使用

/(\${1,2})((?:\\.|[\s\S])*)\1/
Run Code Online (Sandbox Code Playgroud)

要在字符串中进行全局替换,请说source

source.replace (/(\${1,2})((?:\\.|[\s\S])*)\1/g, function (m, tag, src) {
  // m is the entire match
  // tag is '$' or '$$' 
  // src is the internal text

  var rslt = ''; 

  // create what you want to appear in rslt.

  return rslt;
}
Run Code Online (Sandbox Code Playgroud)