所有
我正在尝试使用ACE编辑器创建自己的模式。我正在尝试定义一个非常简单的语法突出显示规则:
this.$rules = {
"start": [
{
token : "string",
regex : /(?:CONSUME)(MATCH)/,
}
]
};
根据在线Javascript正则表达式测试程序,正则表达式/(?:CONSUME)(MATCH)/应该看到CONSUMEMATCH并且只返回MATCH。但是,ACE使用此规则突出显示所有CONSUMEMATCH。
将以下代码插入Ace模式创建器(http://ace.c9.io/tool/mode_creator.html)以查看您自己。
(在下拉菜单中,我选择了Javascript模式和XCode主题.CONSUMEMATCH是我的测试文本,以下代码是模式面板的内容。)
define(function(require, exports, module) {
"use strict";
var oop = require("../lib/oop");
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var myHighlightRules = function() {
this.$rules = {
"start": [
{
token : "string",
regex : /(?:CONSUME)(MATCH)/,
}
]
};
};
oop.inherits(myHighlightRules, TextHighlightRules);
exports.myHighlightRules = myHighlightRules;
});
答案 0 :(得分:1)
由于js regexp不提供确定字符串中匹配组位置的方法,因此Ace仅支持具有所有匹配或所有非匹配组的正则表达式。尝试使用
{
token : ["text", "string"],
regex : /(CONSUME)(MATCH)/,
}
代替。