我如何匹配文本伴侣语法中的冒号(或更简单的字符串)之后的字符串

问题描述 投票:0回答:1

我有一个只有字符串和冒号的文本伴侣语法。是否可以有一种模式,以匹配名称后面跟冒号的字符串而不是后面没有冒号的字符串?(如果这是不可能的,但是可以匹配一个冒号和一个字符串,那就足够了)

示例:

"a" "b" "this one should be different": "c" "d"

我当前的来源:

{
    "name": "mylang",
    "scopeName": "source.mylang",
    "patterns": [
        {
            "match": ":",
            "name": "punctuation.definition.colon.mylang"
        },
        {
            "include": "#string"
        }
    ],
    "repository": {
        "string": {
            "begin": "\"",
            "beginCaptures": {
                "0": {
                    "name": "punctuation.definition.string.quote.begin.mylang"
                }
            },
            "end": "\"",
            "endCaptures": {
                "0": {
                    "name": "punctuation.definition.string.quote.end.mylang"
                }
            },
            "name": "string.quoted.double.mylang",
            "patterns": [
                {
                    "include": "#stringcontent"
                }
            ]
        },
        "stringcontent": {
            "patterns": [
                {
                    "match": "(?x)                # turn on extended mode\n  \\\\                # a literal backslash\n  (?:               # ...followed by...\n    [\"\\\\/bfnrt]     # one of these characters\n    |               # ...or...\n    u               # a u\n    [0-9a-fA-F]{4}) # and four hex digits",
                    "name": "constant.character.escape.mylang"
                },
                {
                    "match": "\\\\.",
                    "name": "invalid.illegal.unrecognized-string-escape.mylang"
                }
            ]
        }
    }
}
visual-studio-code grammar textmate
1个回答
0
投票

如果我正确理解了您的问题,我认为您可以使用此正则表达式

(\"[^\"]+\")\s*\:\s*((?:(?!\1)(\"[^\"]+\")|[^\"]))

第二组$2将是必需的值。这样的模式将找到字符串"a": "b",但不会找到"a": "a"

© www.soinside.com 2019 - 2024. All rights reserved.