Не удается сопоставить конкретную группу в регулярном выражении JavaScript

Я использую библиотеку Rainbow.js, чтобы добавить подсветку синтаксиса к коду LaTeX следующим образом:

Rainbow.extend('latex', [
    {
        'name': 'comment',
        'pattern': /%.*$/gm
    },
    {
        'name': 'storage.function',
        'pattern': /\\[A-z@]+/g
    },
    {
        'matches':
        {
            1: 'entity.name.function',
            3: 'entity.class'
        },
        'pattern': /(\\(begin|end))\s*\{(.*?)\}/g
    }
], true)

но это не в состоянии выделить группу #3 хотя - по всему, что я вижу иначе - группа захвачена. Есть идеи, что может пойти не так? Почему это соответствует первой группе, а не третьей?

1 ответ

Ваша проблема в том, что вы забыли избежать второй скобки, чтобы это было /(\\(begin|end\\))\s*\{(.*?)\}/g,

Но у вас будет только две группы первой (\\(begin|end\\)) а второй (.*), Если вам не нужно получать контент группы, вы можете сделать его не захватывающим (кстати, это улучшит производительность). См. Что такое группа без захвата? Что означает знак вопроса, за которым следует двоеточие (?:)?,

Для A-z Диапазон это не работает как a-zA-Z увидеть классы персонажей. Вы должны скорее использовать a-z диапазон с флагом i что означает, что вы игнорируете дело.

Другие вопросы по тегам