2016-02-09 5 views
0

Я использую редактор ACE для синтаксиса, чтобы выделить систему BBCode на моем сайте, и в целом она хорошо работает. Единственное, что не является нашим эквивалентно многострочные комментарии:ACE Editor многострочное регулярное выражение

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

И он прекрасно работает в качестве примера, как это:

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

, где совпадение находится на одной строке, но, похоже, не похоже на многострочный текст.

Поддерживает ли ACE многорежимное регулярное выражение, и если да, я должен его разбить на части «комментировать, комментировать, комментировать»?

+0

Может быть, вы уже смотрели на это [2014 Google группового обсуждения] (https://groups.google.com/forum/#!topic/ace-discuss/ fDFUOYghi8E), но, на всякий случай ... –

+0

А, так это строка-лайн? Это имело бы смысл. Я считаю, что официальную документацию очень сложно понять порой ... Если это действительно так, то какой был бы самый простой способ реализовать здесь государства? Например, использовать push/pop или отдельное состояние? –

+0

Я бы использовал некоторый 'isMultiLineComment', чтобы указать состояние, которое я думаю ... –

ответ

0

Благодаря комментарию @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 были задокументированы лучше ...

Смежные вопросы