JavaScript正则表达式:替换两个字符串之间的匹配字符串
我允许用户输入转换为MathJax的BBcode;但是,正如您在下面看到的,存在一个问题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\]/
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