【问题标题】:How to parse bbcode regex?如何解析 bbcode 正则表达式?
【发布时间】:2015-04-24 13:49:06
【问题描述】:

我很难找到一个正则表达式。 我想解析除 bbcode [code] 之外的所有表情符号。

例如:

[code] :D  :D  :D  :D  [/code] 
 :D :D :D 

我的正则表达式必须匹配 bbcode 中的三个 :D。

我试过(\[code\](.*?)\[\/code\])来匹配bbcode。

但是我没有找到除了这个块之外的方法。我在 google 上找到了如何使用 (^(\[code\](.*?)\[\/code\])* 例外但无法正常工作....

所以我的第一个问题是:如何匹配所有看起来像 :D 的笑脸? 以及除了正则表达式中的组(bbcode)之外如何?

感谢您的帮助

【问题讨论】:

    标签: javascript regex parsing bbcode


    【解决方案1】:

    我认为,这应该对你有用。

    (:D)(?=[\s\S]*?\[code\][\s\S]*?\[\/code\]+|(?![\s\S]*?\[\/code\]))
    

    将所有:D 的外部代码标签转换为链接的示例实现:

    document.getElementById('tekt').value = document.getElementById('tekt').value.replace(/(:D)(?=[\s\S]*?\[code\][\s\S]*?\[\/code\]+|(?![\s\S]*?\[\/code\]))/igm,"");
    

    JSFiddle Demo.

    【讨论】:

    • 感谢它运行良好。非常感谢您的快速回复。
    【解决方案2】:

    我每个人, 我在构建正则表达式时遇到了一些问题。 现在我需要匹配所有看起来像 :D 的笑脸,<code></code><img /> 之间除外

    我不理解组中的异常概念。我找到了 (?!bar).*

    正则表达式:

    (:D)(?=[\s\S]*?\<code\>[\s\S]*?\<\/code\>+|(?![\s\S]*?\<\/code\>))|(\<img (?!:D).+ \/>)
    

    测试模板

       :D :D :D
    
    [quote="toto"]:D  :D  :D  :D  :D  :D  :D [/quote]
    
    [spoiler="ygfdhy :D  :D  :D  :D "] :D  :D  :D  :D  :D  :D  :D [/spoiler]
    
    [hide] :D  :D  :D  :D  :D  :D  :D [/hide]
    
    <code>  :D  :D  :D  :D  :D  :D  :D </code>
    
    <code>  :D  :D  :D  :D  :D  :D  :D </code>
    
    <img src="#" data-sceditor-emoticon=":D" alt=":D" title=":D" /> 
    
    <img src=#" data-sceditor-emoticon=":D" alt=":D" title=":D" /> 
    

    Regex101

    我有两个问题:

    • 我不能在 img 标签中没有匹配的笑脸
    • 我不匹配只有一个

    感谢您的耐心和专业知识

    【讨论】:

    • 我找到了几乎正确的正则表达式:(:D)(?!((?=\w*[^&lt;]*&lt;(?!code)))|(?=\&lt;img[^&gt;]\&gt;)),但我总是匹配最后一个 img 标签...我不明白为什么!如何循环所有 img 标签?
    • 我发了帖子,有人要解决我的问题吗?我真的很接近目标。谢谢!