Text Mate melihat ke belakang setelah panjang karakter tidak tetap

Saya sedang mengerjakan penyorotan sintaksis untuk bahasa pemrograman yang tidak didukung oleh Visual Studio Code. Penyorotannya berfungsi dengan baik, tetapi saya menghadapi masalah saat menyorot potongan kode berikut:

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

Saya menyorot kata "pool" menggunakan:

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

dan itu berhasil, tapi saya ingin menyorot kata Test1, Test2 dan Test3 juga.

Satu-satunya ide saya adalah menggunakan pandangan negatif ke belakang, seperti ini:

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

Saya membuat tautan online dengan ide ini: https://regexr.com/4793u

Namun oniguruma (regex yang digunakan oleh TextMate - dan juga Ruby) tidak mengizinkan penggunaan pencarian. Dari doc:

(?=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.

Adakah yang tahu alternatif lain untuk menyorot sintaks ini?


person Anny Caroline    schedule 28.01.2019    source sumber


Jawaban (1)


Anda dapat menggunakan grup penangkapan. Di sini saya menangkap 3 grup tetapi hanya menetapkan cakupan ke grup ke-2.

"storages": {
    "patterns": [{
        "match": "^(\w+\[\d*\])\s+(\w+)\s+(\w+);$",
        "captures": {
            "2": {
                "name": "storage.type.ceu"
            }
        }
    }]
},
person Matt    schedule 28.01.2019
comment
Terima kasih banyak. Solusinya bekerja dengan sangat baik. - person Anny Caroline; 29.01.2019