Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript在网页中查找LaTex指令的正则表达式_Javascript_Regex_Latex_Mathjax - Fatal编程技术网

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

使用Javascript在网页中查找LaTex指令的正则表达式,javascript,regex,latex,mathjax,Javascript,Regex,Latex,Mathjax,我需要替换网页中的LaTex指令。LaTex指令被包装在两个“$”符号中,它们类似于$a^2+b^2=1$(内联公式)或$$a^2+b^2=1$$(将在新行中显示的块公式)。 现在的问题是,我想用Javascript将ST指令替换为一些PIC(对应于这些指令),因为浏览器本身无法以LaTex样式显示这些公式。(见图)如何使用正则表达式来实现这一点?我在下面展示了我的工作,还有一些问题。 对于内联公式,我使用: var reg = /\$([^$]|(\\$))*\$(?=[^$])/mg 这意

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

var reg = /\$([^$]|(\\$))*\$(?=[^$])/mg
这意味着我希望一些文本以$开头,然后是$,无论它是'not$'还是'\$'或什么都没有,然后以'$'结尾,但结尾之后将不允许$上升。听起来不错。。
但是对于像:$a^2\$b^2$这样的文本,我希望它能显示为(见图),但事实是正则表达式只替换了它的一部分,比如“*replaced*b^2$”。我需要一些帮助~~~

我不知道LaTex,但看起来您试图用一行代码做的事情太多了。请尝试以下逻辑if-else语句:

if (var reg =/\$\$(.*?)\$\$/msg
    {block_formula=$1}

elsif (var reg=/\$(.*?)\$/msg
    {inline_formula=$1}
这意味着“如果reg以$$开头和结尾,则它是一个包含$$之间内容的块公式。否则,如果reg以$$开头和结尾,则它是一个包含$'之间内容的内联公式。”

另外,如果它只是替换正则表达式的一部分,请确保放置-s标志以确保它与所有实例匹配。

下面的正则表达式

/(\${1,2})((?:\\.|.)*)\1/
将匹配一块用一美元或两美元封装的乳胶块。请注意使用backreference\1来匹配开始标记

如果乳胶块可以延伸ovver线边界,则使用

/(\${1,2})((?:\\.|[\s\S])*)\1/
要在字符串中进行全局替换,请说
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;
}

我不知道LaTex,但看起来您试图用一行代码做的事情太多了。请尝试以下逻辑if-else语句:

if (var reg =/\$\$(.*?)\$\$/msg
    {block_formula=$1}

elsif (var reg=/\$(.*?)\$/msg
    {inline_formula=$1}
如果(var reg=/\$\$(.*?)\$\$/msg) {block_公式=$1}

elsif(var reg=/\$(.*?)\$/msg {inline_公式=$1}

这意味着“如果reg以$$开头和结尾,则它是一个包含$$之间内容的块公式。否则,如果reg以$$开头和结尾,则它是一个包含$'之间内容的内联公式。”


<>编辑:尝试正则表达式(/{{1,1,2})({{2,10}=\d+)1美元/IF公式总是以=和数字结尾,以捕获中间的$$。如果不起作用,请给出更多的例子,以便找到匹配。

< P> > ReEX包含新的行(有时你有大的公式,因此多行):

/(\${1,2})[^]*?[^\\]\1/gm

如果还要匹配分隔符之外的文本:

/(\${1,2})[^]*?[^\\]\1 |[^\$]+\1/gm


撇开你的问题不谈,你不是在使用Mathjax吗?谢谢你的建议。我还没有尝试过这个软件包,但我听说过。在我的应用程序中,数字是首选的。如果可以,请尝试一下。它正在成为这类东西的标准。
(\\$)
不应该是
(\\\$)
?否则,$将被视为字符串结束模式。我没有很好地理解您的意思。但我的意思是,$s之间可以有字符而不是$,或者可以有转义$,如\$,如果确实需要的话。为什么需要三个\不是真的,我指定了内联的情况。我不尝试在一行中同时进行这两个替换对于代码,上面的代码专门用于内联情况,但是如果字符串中有一些转义的$比如“/$”它就有问题了OK,修复了这个问题。现在如果你在LaTex文本之外要求相同的代码,我们将不得不做一些更改。事情并不总是那么简单……我只想找到一个匹配,可以容忍一些esca不管是什么,公式中的ped$。实际上它可能根本没有a=。Javascript不支持所谓的lookback,或者我可以使用它来指定end$之前不应该有反斜杠,比如(?它在大多数情况下都能很好地工作,但是假设公式中有一些$符号,用反斜杠\$转义,它将不会产生正确的结果。编辑我的答案。如果你在LaTex字符串之外要求相同的结果,我们将不得不改变一些。直到那时……这个答案似乎不支持下划线,例如$\sum{i=1}^n$。事情并不总是那么简单…我只想找到一个匹配项,该匹配项将在公式中容忍一些转义的$,不管它是什么。实际上它可能根本没有a=。Javascript不支持所谓的lookback,或者我可以用它来指定end$之前不应该有反斜杠,比如(?)?