ace编辑器非捕获组问题(?:)

时间:2014-08-08 23:49:55

标签: javascript regex editor ace-editor regex-lookarounds

所有

我正在尝试使用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;
});

1 个答案:

答案 0 :(得分:1)

由于js regexp不提供确定字符串中匹配组位置的方法,因此Ace仅支持具有所有匹配或所有非匹配组的正则表达式。尝试使用

{
    token : ["text", "string"], 
    regex : /(CONSUME)(MATCH)/,
}

代替。