繁体   English   中英

JavaScript ReGeX:在两个字符串之间替换匹配的字符串

[英]JavaScript ReGeX: replace matched strings in between two strings

我允许用户输入转换为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;
}

效果很好。 它将BBCodes完美地转换为适当的命令; 但是,如果您开始嵌套命令,则会出现问题。 例如:

如果用户输入:

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

它将转换为:

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

             ^            ^
             |            |
             |            |
             |            |
              HOW TO AVOID

当它们嵌套BBCodes时,如[eq] bbcode中的平方根命令,如何避免多余的\\(\\)

谢谢!

对于正则表达式,这可能会非常困难,因为您不能使用它们来匹配任意嵌套的模式(请参见例如, 可以使用正则表达式来匹配嵌套的模式吗? )。 如果您确实需要这种复杂的嵌套解析,则最好编写一个真正的解析器……或者更好的是,由于BBCode非常普遍,请使用已经存在的解析器。 这是一个看起来相当可扩展并且可以满足您需求的代码: https : //github.com/patorjk/Extendible-BBCode-Parser

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM