ACE Editor multiline regex

杀马特。学长 韩版系。学妹 提交于 2019-12-12 02:28:01

问题


I'm using ACE Editor to syntax highlight my website's BBCode system, and on the whole it's working well. The only thing that isn't is our equivalent to multiline comments:

[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]

The rule for this is:

{
    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)(\])([\s\S]*?)(\[\/)(nobbcode)(\])/,
    caseInsensitive:true
},

And it works great in an example like this:

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

where the match is on a single line, but it doesn't seem to like multiline text.

Does ACE not support multi-line regex, and if so should I instead break it down into "start comment, comment, end comment" parts?


回答1:


Thanks to @Thomas' comment, I learned that ACE parses line-by-line, and therefore multiline regexes will not work.

I fixed my issue with the following syntax rule:

{
    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"}
    ]
},

This essentially breaks it down into start-middle-end, applying the "comment" token to the middle part with defaultToken.

I just wish ACE were documented better...



来源:https://stackoverflow.com/questions/35289002/ace-editor-multiline-regex

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!