2

我正在改进 Sublime Text 中的 Github-Flavored Markdown 语法突出显示,它使用 Oniguruma 正则表达式引擎。具体来说,我正在尝试改进**bold**/__bold__部分的匹配。由于在.tmLanguageXML 文件中使用正则表达式是一个 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|[\(\[\{])...

但这发生 - 括号/括号/大括号匹配,导致突出显示问题:

当前行为:

当前的

使用新的正则表达式:

新的

如您所见,开头的括号在不应该的时候被突出显示。

所以,我的问题是:我应该如何改变事情,以便不突出显示开头的括号,但所需的文本是?

4

0 回答 0