多行字符串文字的语法突出显示

时间:2018-07-27 12:24:32

标签: regex visual-studio-code vscode-extensions tmlanguage

我有一种自定义语言,我想在Visual Studio Code中为其突出显示语法。

在此语言中,字符串文字以双引号或单引号开头和结尾。以双引号开头的字符串文字可能包含单引号,反之亦然。不会发生其他任何转义引号的情况。但是不管起始引号类型如何,这些文字可能会跨越多行。

在我的tmLanguage.json文件中,我尝试了以下正则表达式:

{
    "match": "'[^']*'",
    "name": "string.quoted.single.rss"
},
{
    "match": "\"[^\"]*\"",
    "name": "string.quoted.double.rss"
}

不幸的是,这仅适用于单行文字。然后我尝试了

{
    "match": "(?s)'[^']*'",
    "name": "string.quoted.single.rss"
},
{
    "match": "(?s)\"[^\"]*\"",
    "name": "string.quoted.double.rss"
}

但是使用(?s)修饰符根本无法突出显示语法。

是否可以匹配多行字符串?

1 个答案:

答案 0 :(得分:1)

尝试使用begin / end模式,而不是简单的match。 Haxe语言还具有多行字符串文字,并且可以匹配以下字符串:

strings:
  patterns:
  - begin: '"'
    beginCaptures:
      '0': {name: punctuation.definition.string.begin.hx}
    end: '"'
    endCaptures:
      '0': {name: punctuation.definition.string.end.hx}
    name: string.quoted.double.hx
    patterns:
    - include: '#string-escape-sequences'

该语法使用YAML而不是JSON来避免必须转义正则表达式,但是进行翻译应该相当简单。该代码段的来源为here