0

我正在使用此代码突出显示我的“Lua”代码:

SyntaxHighlighter.brushes.Lua = function()
{
var keywords =  'break do end else elseif function if local nil not or repeat return and then until while this';
var funcs = 'math\\.\\w+ string\\.\\w+ os\\.\\w+ debug\\.\\w+ io\\.\\w+ error fopen dofile coroutine\\.\\w+ arg getmetatable ipairs loadfile loadlib loadstring longjmp print rawget rawset seek setmetatable assert tonumber tostring';
var operators = '~ ! @ # $ % ^ & * ( ) - + = . / ; ? { }';

this.regexList = [
    { regex: new RegExp('--\\[\\[[\\s\\S]*\\]\\]--', 'gm'),     css: 'comments' },
    { regex: new RegExp('--[^\\[]{2}.*$', 'gm'),                css: 'comments' },  // one line comments
    { regex: SyntaxHighlighter.regexLib.doubleQuotedString,     css: 'string' },    // strings
    { regex: SyntaxHighlighter.regexLib.singleQuotedString,     css: 'string' },    // strings
    { regex: new RegExp(this.getKeywords(keywords), 'gm'),      css: 'keyword' },   // keyword
    { regex: new RegExp(this.getKeywords(funcs), 'gm'),         css: 'func' },      // functions
    { regex: new RegExp(this.getKeywords(operators), 'gm'),    css: 'operator' },   // operators
    ];
}

SyntaxHighlighter.brushes.Lua.prototype = new SyntaxHighlighter.Highlighter();
SyntaxHighlighter.brushes.Lua.aliases = ['lua'];

我在控制台中看到此错误:

Uncaught SyntaxError: Invalid regular expression: /\b(?:~|!|@|#|$|%|^|&|*|(|)|-|+|=|.|/|;|?|{|})\b/: Nothing to repeat 

请帮我解决这个错误。谢谢。

4

1 回答 1

0

您收到的错误是由于生成了以下正则表达式:

\b(?:~|!|@|#|$|%|^|&|\*|(|)|-|\+|=|.|\/|;|\?|{|})\b

令牌需要被转义以便从字面上匹配它们各自的字符。也就是说,如果要匹配foo$barfoo\$bar应该使用,因为$标记代表字符串的开头。因此,生成的正则表达式应该是:

\b(?:~|!|@|#|\$|%|\^|&|\*|\(|\)|-|\+|=|\.|\/|;|\?|{|})\b

我以前从未使用过 GeSHi 或其 SyntaxHighlight 扩展,但我最好的猜测是使用以下内容:

var operators = '~ ! @ # \\$ % \\^ & \\* \\( \\) - \\+ = \\. \\/ ; \\? { }';
于 2014-10-17T03:26:37.977 回答