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$”。我需要帮助~~
以下正则表达式
/(\${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)