JavaScript正则表达式:替换两个字符串之间的匹配字符串

JavaScript正则表达式:替换两个字符串之间的匹配字符串,javascript,regex,mathjax,Javascript,Regex,Mathjax,我允许用户输入转换为MathJax的BBcode;但是,正如您在下面看到的,存在一个问题 function chatFormat(text){ text = text.replace('\\', ''); text = text.replace(/\[f\](.+?)\/(.+?)\[\/f\]/igm, '\\( \\frac{\\text{$1}}{\\text{$2}} \\)'); text = text.replace(/\[eq\](.+?)\[\/eq\]/

我允许用户输入转换为MathJax的BBcode;但是,正如您在下面看到的,存在一个问题

function chatFormat(text){
    text = text.replace('\\', '');
    text = text.replace(/\[f\](.+?)\/(.+?)\[\/f\]/igm, '\\( \\frac{\\text{$1}}{\\text{$2}} \\)');
    text = text.replace(/\[eq\](.+?)\[\/eq\]/igm, '\\( $1 \\)');
    text = text.replace(/(.+?)\^(.+?)/igm, '\\( $1^{\\text{$2}} \\)');
    text = text.replace(/\[sqrt\](.+?)\[\/sqrt\]/igm, '\\( \\sqrt{\\text{$1}} \\)');

    return text;
}
效果几乎不错。它完美地将BBCODE转换为适当的命令;但是,如果开始嵌套命令,则会出现问题。e、 g:

如果用户键入:

[eq]15^2=[sqrt]225[/sqrt][/eq]

它将转换为:

\(15^{2}=\(\sqrt{225}\)\)

在嵌套bbcode时,如何避免额外的
\(
\)
,例如
[eq]
bbcode中的平方根命令


谢谢

正则表达式可能很难做到这一点,因为您不能使用它们来匹配任意嵌套的模式(参见示例)。如果您确实需要这种复杂的嵌套解析,那么最好编写一个真正的解析器。。。或者更好,因为BBCode非常常见,使用已经存在的BBCode。这里有一个看起来相当可扩展并且可能适合您的需要的链接:

对不起,您认为需要在回答中更好地解释哪个链接?第一个链接指向关于这个一般问题的一个高度向上投票的stackoverflow主题(为什么正则表达式不适合解析嵌套表达式),而第二个链接指向一个可以解决这个特定问题的库。
             ^            ^
             |            |
             |            |
             |            |
              HOW TO AVOID