【问题标题】:ace editor non capturing group issue (?:)ace 编辑器非捕获组问题 (?:)
【发布时间】:2014-10-02 13:01:50
【问题描述】:

全部,

我正在尝试使用 ACE 编辑器创建自己的模式。我正在尝试定义一个非常简单的语法高亮规则:

this.$rules = {
    "start": [
        {
            token : "string", 
            regex : /(?:CONSUME)(MATCH)/,
        }
    ]
};

根据在线 Javascript 正则表达式测试器,正则表达式 /(?:CONSUME)(MATCH)/ 应该看到 CONSUMEMATCH 并仅返回 MATCH。但是,ACE 使用此规则突出显示所有 CONSUEMATCH。

将以下代码插入 Ace Mode Creator (http://ace.c9.io/tool/mode_creator.html) 以亲自查看。

(在下拉菜单中,我选择了Javascript模式和XCode主题。CONSUEMATCH是我的测试文本,下面的代码是模式面板的内容。)

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;
});

【问题讨论】:

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


    【解决方案1】:

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

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

    改为。

    【讨论】:

    • 哇,这非常有用。谢谢!我已经在代码中看到了标记的数组表示法,但我找不到任何解释。单独的问题:是否有一个地方清楚地解释了诸如 start 和 no_regex 之类的“状态”的含义,以及“下一个”的目的(有时在指定规则时与“令牌”和“正则表达式”一起使用)?我发现 ace 的文档晦涩难懂且令人不满意。
    • 另外,ace 似乎无法识别像“i”这样的修饰符标志。如果我尝试为规则编写不区分大小写的正则表达式,例如 /RULE/i,则 ace 将捕获 RULE 而不是 RuLe。
    • 只能为整个状态指定大小写,添加规则{caseInsensitive: true}
    • Ace highlight rules 创建状态机 next 是下一个状态的名称 no_regex 表示 / 将是除法而不是正则表达式,start 是状态机的第一个状态。关于文档我只知道ace.c9.io/#nav=higlightergithub.com/ajaxorg/ace/wiki/… 和这个旧的pcwalton.blogspot.com/2010/11/…。如果您在这些中找不到问题的答案,请提出一个新问题,stackoverflow 上不允许使用长 cmets
    • 太棒了,这对我也有用。比ace.c9.io 更清晰的 API 文档怎么样?例如,关于扩展语法突出显示的页面说“语法突出显示状态机保持在开始状态,直到您定义下一个状态以使其前进。此时,标记器保持在该新状态,直到它前进到“究竟是什么导致分词器从一个状态推进到另一个状态?我仍然不知道各州如何运作或它们的用途。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多