【问题标题】:Ace Editor - multiple word highlight ruleAce Editor - 多字高亮规则
【发布时间】:2013-10-28 14:15:11
【问题描述】:

恐怕这将是一个非常挑剔的问题——而且我觉得这不可能。

情况

我需要有一个文本区域,其中包含某些单词和短语的高亮(一些 css 效果)。 以前我已经使用editarea进行了这项工作-但是,由于它是一个死项目,因此出现了越来越多的问题,因此我正在尝试使用替代的更当前的编辑器-Ace。

问题

我目前有 ace 使用自定义模式突出显示单个单词的集合,但是与正则表达式匹配,这些短语已经证明超出了我的范围(到目前为止)。

相关模式代码 - 如下所示:

var highlightWords = "word1|word2|word3|phrase one|phrase number two|etc";
 var keywordMapper = this.createKeywordMapper({
     "highlightWords": highlightWords
}, "identifier", true);

this.$rules = {
    "start" : [
    {
        token : keywordMapper,
        regex : "[a-zA-Z0-9_$][a-zA-Z0-9_$]*\\b"
    },{
        token : "text",
        regex : "\\s+"
    }]

我尝试匹配 2 个单词的短语如下(没有成功)(还尝试通过添加带有 {2} 等的副本来匹配较长的条目)

regex : "[a-zA-Z0-9_$][a-zA-Z0-9_$]*(?:\\s[a-zA-Z0-9_$][a-zA-Z0-9_$]*){1}\\b"

任何人有任何想法让 ace 工作 - 或任何更简单的实时编辑单词和短语突出显示的替代方案?

【问题讨论】:

    标签: javascript regex syntax-highlighting highlighting ace-editor


    【解决方案1】:

    您传递给keywordMapper 的正则表达式与空格字符不匹配。

    使用

    this.$rules = {
        "start" : [
        {
            token : "highlightWords",
            regex : "word1|word2|word3|phrase one|phrase number two|etc"
        }]
    }
    

    【讨论】:

    • 现在这很奇怪(/讨厌自己)因为插入相同的正则表达式是我尝试的第一个技巧之一 - 没有运气。但是我刚刚又试了一次,我猜我的一些其他代码一开始就阻止了它的工作,因为它现在工作得很好。无论如何欢呼
    • 很抱歉再问一个问题 - 但由于这更像是一个螺栓,我还是会的。我需要使正则表达式不区分大小写 - 通常不是问题,只需添加 i 标志,但它似乎被 ace 忽略/覆盖,(或者我只是遗漏了一些东西),当前代码:regex: new RegExp(lower_words_regex,"gi")
    • javascript 不支持内联标志。但是您可以将caseInsensitive:true 标志添加到规则中,请参阅github.com/ajaxorg/ace/blob/master/lib/ace/mode/… github.com/ajaxorg/ace/blob/master/lib/ace/tokenizer.js#L64
    • 太好了,这似乎工作得很好,干杯 - 也为我节省了一些时间,我刚刚开始通过源代码进行伟大的拖网,试图找到这一点。谢谢
    • @a 用户,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多