我正在改进 Sublime Text 中的 Github-Flavored Markdown 语法突出显示,它使用 Oniguruma 正则表达式引擎。具体来说,我正在尝试改进**bold**
/__bold__
部分的匹配。由于在.tmLanguage
XML 文件中使用正则表达式是一个 PITA,我正在使用PackageDev
它的.YAML-tmLanguage
格式。这是原始的正则表达式:
name: markup.bold.markdown
begin: (?x)(?:^|\s|\G)(\*\*|__)(?=\S)(?=(<[^>]*+>| (?<raw>`+)([^`]|(?!(?<!`)\k<raw>(?!`))`)*+\k<raw>|
\\[\\`*_{}\[\]()#.!+\->]?+| \[((?<square>[^\[\]\\]| \\.| \[ \g<square>*+ \])*+\](([ ]?\[[^\]]*+\])| (\([ \t]*+<?
(.*?)>?[ \t]*+((?<title>['"])(.*?)\k<title>)?\))))|(?!(?<=\S)\1).)++(?<=\S)\1)
end: (?<=\S)(\1)
captures:
'1': {name: punctuation.definition.bold.markdown}
这是一个例子。
这在普通句子中效果很好:
I want this word to be **bold** but not this.
但当粗体文本紧跟在圆括号、方括号或大括号之前时:
I like bold (**like this**) but it isn't!
所以,我想我会添加(
,[
和{
到第一组:
begin: (?x)(?:^|\s|\G|[\(\[\{])...
但这会发生 - 括号/括号/大括号匹配,导致突出显示问题:
当前行为:
使用新的正则表达式:
如您所见,开头的括号在不应该的时候被突出显示。
所以,我的问题是:我应该如何改变事情,以便不突出显示开头的括号,但所需的文本是?