Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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和正则表达式将文本更改为内联文本_Javascript_Regex_Math_Mathjax - Fatal编程技术网

使用javascript和正则表达式将文本更改为内联文本

使用javascript和正则表达式将文本更改为内联文本,javascript,regex,math,mathjax,Javascript,Regex,Math,Mathjax,我用正则表达式 /\$([^$]*)\$/g 用latex替换两个$内的文本 在javascript中,我使用 text.replace(/\$([^$]*)\$/g, function (str, match) { return changeToTeX(match); } 它几乎可以正常工作,但是,例如,本文 价格在400美元到500美元之间 因为它认为应该将400和转换为latex,因为此文本位于美元符号之间,所以会被搞砸 也许这是不可能修复的。我刚刚检查了math.stacke

我用正则表达式

/\$([^$]*)\$/g
用latex替换两个$内的文本

在javascript中,我使用

text.replace(/\$([^$]*)\$/g, function (str, match) {
    return changeToTeX(match);
}
它几乎可以正常工作,但是,例如,本文

价格在400美元到500美元之间

因为它认为应该将
400和
转换为latex,因为此文本位于美元符号之间,所以会被搞砸


也许这是不可能修复的。我刚刚检查了math.stackexchange.com,它支持用latex替换美元符号内的文本的相同行为,但在这里,美元符号之间的所有文本都被解释为latex时,同样的问题也会出现。

如果在
$…$
内只有数字,请使用

/\$(\d+)\$/g
/\B\$\b([^$]*)\b\$\B/g
其中
\d+
匹配一个或多个数字。内部的模式可以增强以匹配任何类型的数字(请参阅)

要匹配除
$
和空白以外的任何内容,请使用

/\$([^\s$]*)\$/g

要仅在第一个
$
之后和最后一个
$
之前需要单词字符,请使用

/\$(\d+)\$/g
/\B\$\b([^$]*)\b\$\B/g

请参见

@Tushar:只有当价格在400美元和500美元之间时,才需要匹配价格。。我知道这句话中不应该有匹配项。它似乎有效:)但是如果我写$2+2$时前面有空格,或者写$\frac{3}{4}$,它就不能工作了,那么规范是什么呢?你知道,正则表达式只能匹配正则文本。让我猜猜:在第一个
$
之后可以有任何内容,在后面的
$
之前可以有任何内容,除了空格之外?中间没有
$
?因为您已经用MathJax标记了它,请注意MathJax的tex2jax预处理器更复杂,并且还提供转义。