2

我正在使用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,即使——根据我所看到的一切——该组正在被捕获。知道可能出了什么问题吗?为什么它会匹配第一组而不匹配第三组?

4

1 回答 1

0

您的问题是您忘记转义第二个括号,所以它会是/(\\(begin|end\\))\s*\{(.*?)\}/g.

但是您将只有第一组(\\(begin|end\\))和第二组两组(.*)。如果您不需要获取组的内容,可以将其设为非捕获(顺便提高性能)请参阅什么是非捕获组?问号后跟冒号 (?:) 是什么意思?.

对于A-z范围,它不像a-zA-Z看到character classes那样工作。您应该使用a-z带有标志的范围,i这意味着您忽略大小写。

于 2014-08-26T11:46:31.867 回答