Regex 在某一组字符后匹配2个字符,但不匹配该组中的任何字符
我正在努力改进Github风格的Markdown语法,在Sublime文本中突出显示,它使用Oniguruma正则表达式引擎。具体来说,我正在尝试改进Regex 在某一组字符后匹配2个字符,但不匹配该组中的任何字符,regex,markdown,sublimetext,oniguruma,Regex,Markdown,Sublimetext,Oniguruma,我正在努力改进Github风格的Markdown语法,在Sublime文本中突出显示,它使用Oniguruma正则表达式引擎。具体来说,我正在尝试改进**bold**/\uuuu bold\uuu部分的匹配。因为在.tmLanguageXML文件中使用正则表达式是一种PITA,所以我使用了它的格式。以下是原始正则表达式: name: markup.bold.markdown begin: (?x)(?:^|\s|\G)(\*\*|__)(?=\S)(?=(<[^>]*+>| (
**bold**
/\uuuu bold\uuu
部分的匹配。因为在.tmLanguage
XML文件中使用正则表达式是一种PITA,所以我使用了它的格式。以下是原始正则表达式:
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 like bold (**like this**) but it isn't!
因此,我想我应该将(
,[
和{
添加到第一组:
begin: (?x)(?:^|\s|\G|[\(\[\{])...
但是发生了-括号/括号/大括号匹配,导致高亮显示问题:
当前行为:
使用新的正则表达式:
正如您所看到的,在不应该高亮显示的情况下,开始部分会高亮显示
所以,我的问题是:我应该如何改变事情,使开头部分不突出显示,但所需的文本是?您当前的正则表达式未能突出显示里面的文本**您的意思是什么?我只问您。如果您回答我会更好。@Avinash很抱歉,我有一个会议。我不确定您的意思是什么“未能突出显示文本…”。它只匹配regex101上的最后一个字母,但在Sublime中效果很好,正如您在第一张图像中所看到的。我尝试了您的版本4,但现在没有突出显示粗体-`这是粗体文本'或
这是(**插入**)文本
。
begin: (?x)(?:^|\s|\G|[\(\[\{])...