Ошибка в файле подсветки синтаксиса js
Я использую этот код для выделения моих кодов "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
Пожалуйста, помогите мне решить эту ошибку. Благодарю.
1 ответ
Решение
Ошибка, которую вы получаете из-за следующего генерируемого регулярного выражения:
\b(?:~|!|@|#|$|%|^|&|\*|(|)|-|\+|=|.|\/|;|\?|{|})\b
Жетоны должны быть экранированы, чтобы буквально соответствовать их соответствующим персонажам. То есть, если вы хотите соответствовать foo$bar
, foo\$bar
следует использовать, потому что $
токен представляет начало строки. Следовательно, сгенерированное регулярное выражение должно быть:
\b(?:~|!|@|#|\$|%|\^|&|\*|\(|\)|-|\+|=|\.|\/|;|\?|{|})\b
Я никогда раньше не использовал GeSHi или его расширение SyntaxHighlight, но лучше всего было бы использовать следующее:
var operators = '~ ! @ # \\$ % \\^ & \\* \\( \\) - \\+ = \\. \\/ ; \\? { }';