我正在改进使用Oniguruma正则表达式引擎的Sublime Text中的Github-Flavored Markdown语法高亮显示。具体来说,我正在尝试改进**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}
这是一个example。
这在常规句子中工作正常:
I want this word to be **bold** but not this.
但不是当粗体文本前面有一个paren,括号或括号时:
I like bold (**like this**) but it isn't!
所以,我想我会将(
,[
和{
添加到第一组:
begin: (?x)(?:^|\s|\G|[\(\[\{])...
但this发生了 - 匹配了paren / bracket / brace,导致突出显示出现问题:
当前行为:
使用新的正则表达式:
正如你所看到的那样,开场线突出显示,不应该是。
所以,我的问题是:我应该如何更改内容,以便不突出显示开头,但所需的文字是?