在一组特定字符后匹配2个字符,但不匹配该组中的任何字符

时间:2015-08-03 16:22:12

标签: regex markdown sublimetext oniguruma

我正在改进使用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!

Example

所以,我想我会将([{添加到第一组:

begin: (?x)(?:^|\s|\G|[\(\[\{])...

this发生了 - 匹配了paren / bracket / brace,导致突出显示出现问题:

当前行为:

current

使用新的正则表达式:

new

正如你所看到的那样,开场线突出显示,不应该是。

所以,我的问题是:我应该如何更改内容,以便不突出显示开头,但所需的文字是?

0 个答案:

没有答案