如何在ACE编辑器中突出显示每行中的第一个单词?

时间:2014-01-23 06:14:55

标签: javascript syntax-highlighting ace-editor

假设有这样的代码:

ab cd
ef gh
  ij kl
mn

我想突出显示行头的所有字词:ab ef ij(是的,我们有缩进)mn,如何编写regex:

我尝试了http://ace.c9.io/tool/mode_creator.html,但/^\s*/ /\n/未按预期工作。它们实际上是如何工作的?

2 个答案:

答案 0 :(得分:2)

Ace连接组中规则中的所有正则表达式。 所以如果你有一个像

这样的小组

[{token: .., regex: "regex1"}, {token: .., regex: /regex2/}, {defaultToken: ..}]

结果正则表达式为/(regex1)(regex2)($)/(参见here) 文档中的每一行都重复匹配生成的正则表达式,并为每个匹配标记创建相应规则的类型。对于不匹配的文本,使用defaultToken。

由于正则表达式在规则中逐行匹配/\n/将无法匹配任何内容。

关于你的第一个问题,我认为{token : "comment", regex : "^\\s*\\w+"}应该有用。

答案 1 :(得分:1)

这是我的解决方案,我必须将/^\s*/放在parameter之前,然后才有效。

this.$rules = {
    start: [{
        token: 'support.function',
        regex: /[^\(\)\"\s]+/,
        next: 'line'
    }],
    line: [{
        token: 'markup.raw',
        regex: /^\s*/,
        next: 'start',
    }, {
        token: 'variable.parameter',
        regex: /[^\(\)\"\s]+/
    }, {
        token: 'markup.raw',
        regex: /^\ */,
        next: 'start',
    }]
}

此处的完整代码: https://github.com/Cirru/ace/blob/master/lib/ace/mode/cirru_highlight_rules.js