{ "name": "Regular Expression (Extended)", "scopeName": "source.regexp.extended", "patterns": [ { "include": "#main" } ], "repository": { "assertion": { "patterns": [ { "name": "meta.assertion.positive.look-ahead.regexp", "begin": "\\(\\?=", "end": "\\)", "patterns": [ { "include": "#main" } ], "beginCaptures": { "0": { "name": "punctuation.definition.assertion.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.assertion.end.regexp" } } }, { "name": "meta.assertion.negative.look-ahead.regexp", "begin": "\\(\\?!", "end": "\\)", "patterns": [ { "include": "#main" } ], "beginCaptures": { "0": { "name": "punctuation.definition.assertion.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.assertion.end.regexp" } } }, { "name": "meta.assertion.negative.look-behind.regexp", "begin": "\\(\\?\u003c!", "end": "\\)", "patterns": [ { "include": "#main" } ], "beginCaptures": { "0": { "name": "punctuation.definition.assertion.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.assertion.end.regexp" } } }, { "name": "meta.assertion.positive.look-behind.regexp", "begin": "\\(\\?\u003c=", "end": "\\)", "patterns": [ { "include": "#main" } ], "beginCaptures": { "0": { "name": "punctuation.definition.assertion.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.assertion.end.regexp" } } } ] }, "calloutBrackets": { "begin": "{", "end": "}", "patterns": [ { "include": "#calloutBrackets" }, { "include": "#main" } ], "beginCaptures": { "0": { "name": "punctuation.definition.bracket.curly.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.bracket.curly.end.regexp" } } }, "comment": { "name": "comment.line.number-sign.regexp", "begin": "#", "end": "$", "beginCaptures": { "0": { "name": "punctuation.definition.comment.regexp" } } }, "conditional": { "name": "meta.conditional.regexp", "begin": "(\\()(\\?)(?=\\()", "end": "\\)", "patterns": [ { "name": "punctuation.separator.condition.if-else.regexp", "match": "\\|" }, { "include": "#assertion" }, { "name": "meta.condition.function-call.regexp", "begin": "\\G\\(", "end": "\\)", "patterns": [ { "name": "storage.type.function.subpattern.regexp", "match": "\\GDEFINE" }, { "name": "keyword.other.assertion.regexp", "match": "\\Gassert" }, { "match": "\\G(?:(\u003c)([^\u003e]+)(\u003e)|(')([^\u003e]+)('))", "captures": { "1": { "name": "punctuation.definition.group-reference.bracket.angle.begin.regexp" }, "2": { "name": "entity.group.name.regexp" }, "3": { "name": "punctuation.definition.group-reference.bracket.angle.end.regexp" }, "4": { "name": "punctuation.definition.group-reference.quote.single.begin.regexp" }, "5": { "name": "entity.group.name.regexp" }, "6": { "name": "punctuation.definition.group-reference.quote.single.end.regexp" } } }, { "match": "\\G(R(\u0026))(\\w+)", "captures": { "1": { "name": "keyword.other.recursion.specific.regexp" }, "2": { "name": "punctuation.definition.reference.regexp" }, "3": { "name": "entity.group.name.regexp" } } }, { "name": "keyword.other.recursion.specific-group.regexp", "match": "\\GR\\d+" }, { "name": "keyword.other.recursion.overall.regexp", "match": "\\GR" }, { "name": "keyword.other.reference.absolute.regexp", "match": "\\G\\d+" }, { "name": "keyword.other.reference.relative.regexp", "match": "\\G[-+]\\d+" }, { "name": "entity.group.name.regexp", "match": "\\G\\w+" } ], "beginCaptures": { "0": { "name": "punctuation.section.condition.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.section.condition.end.regexp" } } }, { "include": "#main" } ], "beginCaptures": { "1": { "name": "punctuation.section.condition.begin.regexp" }, "2": { "name": "keyword.control.flow.regexp" } }, "endCaptures": { "0": { "name": "punctuation.section.condition.end.regexp" } } }, "group": { "patterns": [ { "include": "source.regexp#fixedGroups" }, { "name": "meta.group.named.regexp", "begin": "\\(\\?(?=P?[\u003c'])", "end": "\\)", "patterns": [ { "contentName": "entity.group.name.regexp", "begin": "\\G(P?)(\u003c)", "end": "\u003e", "beginCaptures": { "1": { "name": "storage.type.function.named-group.regexp" }, "2": { "name": "punctuation.definition.named-group.bracket.angle.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.named-group.bracket.angle.end.regexp" } } }, { "contentName": "entity.group.name.regexp", "begin": "\\G'", "end": "'", "beginCaptures": { "0": { "name": "punctuation.definition.named-group.quote.single.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.named-group.quote.single.end.regexp" } } }, { "include": "#main" } ], "beginCaptures": { "0": { "name": "punctuation.definition.group.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.group.end.regexp" } } }, { "name": "meta.group.non-capturing.regexp", "begin": "(\\(\\?)((?:y{[\\w]+}|[-A-Za-z^])*)(:)", "end": "\\)", "patterns": [ { "include": "#main" } ], "beginCaptures": { "1": { "name": "punctuation.definition.group.begin.regexp" }, "2": { "patterns": [ { "include": "source.regexp#scopedModifiers" } ] }, "3": { "name": "punctuation.separator.colon.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.group.end.regexp" } } }, { "name": "meta.group.atomic.regexp", "begin": "\\(\\?\u003e", "end": "\\)", "patterns": [ { "include": "#main" } ], "beginCaptures": { "0": { "name": "punctuation.definition.group.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.group.end.regexp" } } }, { "name": "meta.group.script-run.regexp", "begin": "(\\(\\*)((?:atomic_)?script_run|a?sr)(:)", "end": "\\)", "patterns": [ { "include": "#main" } ], "beginCaptures": { "1": { "name": "punctuation.definition.group.begin.regexp" }, "2": { "name": "keyword.control.verb.regexp" }, "3": { "name": "punctuation.separator.colon.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.group.end.regexp" } } }, { "name": "meta.group.callout.contents.regexp", "begin": "(\\(\\?{1,2})({)", "end": "(?x)\n(}) # Last closing bracket\n((\\[)([_A-Za-z][_A-Za-z0-9]*)(\\]))? # [tag]\n(X|\u003c|\u003e)? # Callout direction\n(?:[^\\)]*) # Silently skip unexpected characters\n(\\)) # Closing bracket", "patterns": [ { "include": "#calloutBrackets" }, { "include": "#main" } ], "beginCaptures": { "1": { "name": "punctuation.definition.group.begin.regexp" }, "2": { "name": "punctuation.definition.bracket.curly.begin.regexp" } }, "endCaptures": { "1": { "name": "punctuation.definition.bracket.curly.end.regexp" }, "2": { "name": "entity.name.tag.callout-tag.regexp" }, "3": { "name": "punctuation.definition.callout-tag.begin.regexp" }, "4": { "name": "callout-tag.constant.other.regexp" }, "5": { "name": "punctuation.definition.callout-tag.end.regexp" }, "6": { "name": "constant.language.callout-direction.regexp" }, "7": { "name": "punctuation.definition.group.end.regexp" } } }, { "name": "meta.group.callout.regexp", "begin": "(?x)\n(\\(\\*)\n([_A-Za-z][_A-Za-z0-9]*) # Name\n((\\[)([_A-Za-z][_A-Za-z0-9]*)(\\]))? # [tag]\n({)", "end": "(?x)\n(})\n(?:[^\\)]*)\n(?:(\\))|(?=$))", "patterns": [ { "include": "#main" }, { "name": "variable.parameter.argument.regexp", "match": "[-\\w]+" } ], "beginCaptures": { "1": { "name": "punctuation.definition.group.begin.regexp" }, "2": { "name": "entity.name.callout.regexp" }, "3": { "name": "entity.name.tag.callout-tag.regexp" }, "4": { "name": "punctuation.definition.callout-tag.begin.regexp" }, "5": { "name": "callout-tag.constant.other.regexp" }, "6": { "name": "punctuation.definition.callout-tag.end.regexp" }, "7": { "name": "punctuation.definition.arguments.begin.regexp" } }, "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.regexp" }, "2": { "name": "punctuation.definition.group.end.regexp" } } }, { "name": "meta.absent-function.regexp", "begin": "(\\()(\\?~)(\\|)", "end": "\\)", "patterns": [ { "name": "punctuation.separator.delimiter.pipe.regexp", "match": "\\|" }, { "name": "variable.parameter.argument.regexp", "match": "[-\\w]+" }, { "include": "#main" } ], "beginCaptures": { "1": { "name": "punctuation.definition.group.begin.regexp" }, "2": { "name": "keyword.control.flow.regexp" }, "3": { "name": "punctuation.separator.delimiter.pipe.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.group.end.regexp" } } }, { "name": "meta.group.regexp", "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#main" } ], "beginCaptures": { "0": { "name": "punctuation.definition.group.begin.regexp" } }, "endCaptures": { "0": { "name": "punctuation.definition.group.end.regexp" } } } ] }, "main": { "patterns": [ { "include": "#comment" }, { "include": "source.regexp#comment" }, { "include": "source.regexp#variable" }, { "include": "source.regexp#anchor" }, { "include": "source.regexp#escape" }, { "include": "source.regexp#wildcard" }, { "include": "source.regexp#alternation" }, { "include": "source.regexp#quantifier" }, { "include": "#assertion" }, { "include": "#conditional" }, { "include": "#group" }, { "include": "source.regexp#class" } ] } } }