VSCode语法匹配字符串中的常量

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

我遇到的问题是VSCode语法突出显示是识别字符串中的数值。我的印象是,当开始/结束捕获发生时,其中的所有内容都被视为字符串,后续规则将不会执行。

在我的语法文件中,我有以下定义:

    {
        "name": "string.quoted.single.proc",
        "begin": "'",
        "beginCaptures": { "0": { "name": "punctuation.definition.quotes.begin.single.proc" } },
        "end": "'",
        "endCaptures": { "0": { "name": "punctuation.definition.quotes.end.single.proc" } },
        "patterns": [{
            "include": "$self"
        }]
    },

    {
        "name": "constant.numeric.floating-point.proc", 
        "match": "(\\.\\d+([Ee][-+]\\d+)?i?)\\b|\\b\\d+\\.\\d*(([Ee][-+]\\d+)?i?\\b)?"
    },

    {
        "name": "constant.numeric.integer.proc", 
        "match": "\\b((0x[0-9a-fA-F]+)|(0[0-7]+i?)|(\\d+([Ee]\\d+)?i?)|(\\d+[Ee][-+]\\d+i?))\\b"
    },

但是,当我有这样的文字时:

Parse( $year & '-01-01', 'yyyy-MM-dd' );

两个“01”值突出显示,就好像它们是数字文字一样。

在数字常量匹配表达式中,如果数字在引号内,我是否必须明确过滤掉?

regex visual-studio-code vscode-settings
1个回答
0
投票

我想我刚刚意识到自己的问题。问题是由于

"patterns": [{
    "include": "$self"
}]

一旦我删除了内部模式匹配(即用于转义序列匹配),它就可以工作了。但是,我想我不明白这种模式在数字文字规则方面是如何工作的。

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