Отслеживание Text Mate после нефиксированной длины символа

Я работаю над подсветкой синтаксиса для языка программирования, не поддерживаемого кодом Visual Studio. Подсветка работает хорошо, но я столкнулся с проблемой выделения следующих фрагментов кода:

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.

Кто-нибудь знает какие-либо альтернативы, чтобы выделить этот синтаксис?


person Anny Caroline    schedule 28.01.2019    source источник


Ответы (1)


Вы можете использовать группы захвата. Здесь я захватываю 3 группы, но назначаю область действия только второй.

"storages": {
    "patterns": [{
        "match": "^(\w+\[\d*\])\s+(\w+)\s+(\w+);$",
        "captures": {
            "2": {
                "name": "storage.type.ceu"
            }
        }
    }]
},
person Matt    schedule 28.01.2019
comment
Большое Вам спасибо. Решение сработало как шарм. - person Anny Caroline; 29.01.2019