正则表达式 - 匹配任何函数名称,但关键字除外

时间:2017-06-01 11:55:26

标签: javascript regex

刚开始,我正在使用regexr.com作为参考(在Javascript中编写突出显示)。一个非常重要的事情是:我没有为Javascript编写语法高亮。我正在编写一种名为gLUA的语言,这是一种非常严格的语言类型,可以找到示例代码{{ 3}}

我有一个项目,我正在使用PrismJS,其语法突出显示功能。我不得不用正则表达式(下面的代码)制作自己的,现在我被困在一个部分,即两个选择器相互冲突。使用这两个规则,语法高亮显示here

如果我从标点符号正则表达式选择中删除(,那么一切都变成like this(括号除外,即...)

我需要(?=\()选择该功能,否则我将非常糟糕的时间来解决它。我已经花了几个小时搞清楚了,所以我宁可不要捅它。还有其他解决方法吗?我喜欢括号上的灰色......

// DONE
'directive': /@(name.*|model.*|inputs|outputs|persist|trigger|autoupdate)/,

//DONE
'type': /\b(angle|array|bone|complex|entity|matrix[24]?|number|quaternion|ranger|string|table|vector[24]?|wirelink)(?!\()\b/ig,

//DONE
'keyword': /\b((else)?if|else|for(each)?|while|break|continue|local|switch|case|default|function|return)\b/g,

//ERROR - CLASHING WITH FUNCTION BECAUSE OF "("
'punctuation': /[()\[\]{};:,]/,

//DONE
'operator': /[-+=*/%]/,

//DONE WITH MARGIN OF ERROR - SINGLE POUND CONSUMES NEXT LINE IF NO COMMENT IS ADDED AFTER POUND
'comment': /#([^\[].*?|\[[\s\S]*?]#)\b/g,

//DONE WITH MARGIN OF ERROR
'variable': /\b[A-Z]\w*/,

//DONE
'constant': /_[A-Z0-9_]+/,

//ERROR - CLASHING WITH THE PUNCTUATION "(" BECAUSE OF SELECTION (?=\() IN REGEX
'function': /\b(?!(else)?if|else|for(each)?|while|break|continue|local|switch|case|default|function|return)([a-z]\w*)(?=\()/,

//DONE
'number': /\b[-+]?[0-9]*\.?[0-9]+\b/,

//DONE
'string': {
    pattern: /("|')(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/ig,
    greedy: true
}

0 个答案:

没有答案