2

我正在为 Visual Studio Code 不支持的编程语言进行语法突出显示。突出显示效果很好,但我在突出显示以下代码时遇到了问题:

pool[] Test1 t1;
pool[1] Test2 t2;
pool[10] Test3 t3;

我使用以下方法突出显示“池”这个词:

"storages": {
    "patterns": [{
        "name": "storage.type.ceu",
        "match": "\\bpool\\b"
    }]
},

它正在工作,但我也想突出显示 Test1、Test2 和 Test3 这三个词。

我唯一的想法是在后面使用负面的外观,如下所示:

(?<=pool\[\d*\]\s+)([A-Z])\w+

我用这个想法创建了一个在线链接:https ://regexr.com/4793u

但是 oniguruma(TextMate 使用的正则表达式 - 以及 Ruby)不允许使用环视。来自文档

(?=subexp)         look-ahead
  (?!subexp)         negative look-ahead
  (?<=subexp)        look-behind
  (?<!subexp)        negative look-behind

                     Subexp of look-behind must be fixed-width.
                     But top-level alternatives can be of various lengths.
                     ex. (?<=a|bc) is OK. (?<=aaa(?:b|cd)) is not allowed.

                     In negative look-behind, capturing group isn't allowed,
                     but non-capturing group (?:) is allowed.

有谁知道突出显示此语法的任何替代方法?

4

1 回答 1

1

您可以使用捕获组。在这里,我捕获了 3 个组,但只为第二个分配了一个范围。

"storages": {
    "patterns": [{
        "match": "^(\w+\[\d*\])\s+(\w+)\s+(\w+);$",
        "captures": {
            "2": {
                "name": "storage.type.ceu"
            }
        }
    }]
},
于 2019-01-28T22:44:45.830 回答