全部,
我正在尝试使用 ACE 编辑器创建我自己的模式。我正在尝试定义一个非常简单的语法突出显示规则:
this.$rules = {
"start": [
{
token : "string",
regex : /(?:CONSUME)(MATCH)/,
}
]
};
根据在线 Javascript 正则表达式测试程序,正则表达式/(?:CONSUME)(MATCH)/应该看到 CONSUMEMATCH 并仅返回 MATCH。然而,ACE 用这条规则突出显示了 CONSUMEMATCH 的所有内容。
将以下代码插入 Ace Mode Creator (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;
});
最佳答案
由于 js 正则表达式不提供确定字符串中匹配组位置的方法,因此 Ace 仅支持包含所有匹配或所有非匹配组的正则表达式。尝试使用
{
token : ["text", "string"],
regex : /(CONSUME)(MATCH)/,
}
相反。
关于javascript - ace 编辑器非捕获组问题(?:),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25213824/