我正在使用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 被更好地记录下来......