【问题标题】:Not Parse BBCode Between Code Tags不解析代码标签之间的 BBCode
【发布时间】:2015-05-11 00:13:32
【问题描述】:

我已经阅读了有关此主题的其他帖子,但似乎都没有帮助。

好的,我正在编写自己的 BBCode 解析器。现在我的问题是如何不解析 [code] 标签之间的 BBCode?我真的不确定我会怎么做。这是我当前的代码:

$('#posttextareadisplay').text($('#textareainput').val());
    var replacebbcode = $('#posttextareadisplay').html().replace(/(\[((\/?)(b|i|u|s|sup|sub|code|quote))\])/gi, '<$2>')
                                                        .replace(/(\[(rule)\])/gi, '<hr>')
                                                        .replace(/(\[((align=)(left|center|right|justify))\])/gi, '<div align="$4">')
                                                        .replace(/(\[((\/)(align))\])/gi, '</div>')
                                                        .replace(/(\[((color=#)([0-9a-fA-F]{0,}))\])/gi, '<span style="color:#$4">')
                                                        .replace(/(\[((\/)(color))\])/gi, '</span>')
                                                        .replace(/(\[((size=)(1|2|3|4|5|6))\])/gi, '<font size="$4">')
                                                        .replace(/(\[((\/)(size))\])/gi, '</font>')
                                                        .replace(/(\[((link=)([a-zA-Z0-9._:\/\\+-]{0,}))\])/gi, '<a href="$4">')
                                                        .replace(/(\[((\/)(link))\])/gi, '</a>')
                                                        .replace(/((((http|https):\/\/)(([a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|local|internal))(:[0-9]{1,5})?(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&amp;]*)?)?(#[a-zA-Z0-9!$&'()*+.=-_~:@\/?]*)?)(\s+|$))/gi, '<a href="$1">$1</a>');
    $('#posttextareadisplay').html(replacebbcode);

那么我该怎么做才能不解析 [code] 标签之间的代码?谢谢你!!! :)

附注我正在使用 JS/Jquery

【问题讨论】:

  • 抱歉,没有帮助的自插件,但我为 PHP 创建了一个 [shortcode] 库,它捕获最外层的匹配项,因此您只需要禁用递归解析并按原样返回 [code] 内容。您可以在这里查看:github.com/thunderer/Shortcode。也许它会给你一点启发。 :)
  • 嗯,TY,但我想自己编写代码。
  • 正确的解决方案是使用真正的正式结构化解析器。我已经忘记了我滥用来入侵或破坏网站的基于正则表达式的 BBCode 实现的数量。

标签: javascript jquery html bbcode


【解决方案1】:

一种解决方案是将 BBCode 特殊字符 [] 替换为相应的 HTML 实体 &amp;#91;&amp;#93;,以便以后不会对其进行解析:

input.replace(/\[code](.*?)\[\/code]/g,function(m,a){return '<code>'+a.replace(/[[\]]/g, function(t){return '&#9'+(t=='['?'1':'3')+';';})+'</code>';})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2012-07-22
    相关资源
    最近更新 更多