ACE 编辑器多行正则表达式



我正在使用ACE编辑器来语法突出显示我网站的BBCode系统,总的来说它运行良好。唯一不是的是我们相当于多行注释:

[nobbcode]
    I am a demo of [b]BBCode[/b].
    Anything in here is shown as plain text, with code left intact,
    allowing people to show how it works.
[/nobbcode]

这样做的规则是:

{
    token:[
        "meta.tag.punctuation.tag-open.xml",
        "meta.tag.tag-name.xml",
        "meta.tag.punctuation.tag-close.xml",
        "comment",
        "meta.tag.punctuation.end-tag-open.xml",
        "meta.tag.tag-name.xml",
        "meta.tag.punctuation.tag-close.xml"
    ],
    regex:/([)(nobbcode)(])([sS]*?)([/)(nobbcode)(])/,
    caseInsensitive:true
},

它在这样的示例中效果很好:

You can use [nobbcode][b]...[/b][/nobbcode] to designate bold text.

匹配项在一行上,但它似乎不喜欢多行文本。

ACE 是否不支持多行正则表达式,如果是,我应该将其分解为"开始评论、评论、结束评论"部分吗?

多亏了@Thomas的评论,我了解到 ACE 逐行解析,因此多行正则表达式将不起作用。

使用以下语法规则修复了我的问题:

{
    token:[
        "meta.tag.punctuation.tag-open.xml",
        "meta.tag.tag-name.xml",
        "meta.tag.punctuation.tag-close.xml"
    ],
    regex:/([)(nobbcode)(])/,
    caseInsensitive:true,
    push:[
        {
            token:[
                "meta.tag.punctuation.end-tag-open.xml",
                "meta.tag.tag-name.xml",
                "meta.tag.punctuation.tag-close.xml"
            ],
            regex:/([/)(nobbcode)(])/,
            caseInsensitive:true,
            next:"pop"
        },
        {defaultToken:"comment"}
    ]
},

这基本上将其分解为开始-中间-结束,将"注释"标记应用于中间部分,并带有defaultToken

我只是希望 ACE 被更好地记录下来......

相关内容

  • 没有找到相关文章

最新更新