更改在 ace-editor 中为令牌显示的文本

Alter the text displayed for a token in ace-editor

我有这个 example 我通过正则表达式定位匹配的字符串并使用高亮规则更改样式。

this.$rules = {
  start: [{
    token: 'variableRef',
    regex: /$variable\..+$/
  }]
};

并使用 css class:

改变颜色
.ace_variableRef {
  color: red;
}

但我真正想做的是将显示的文本从 $variable.1.name$ 更改为 "resolved value"。我可以访问:

var variables = {
  1: 'timeout'
};

所以我可以使用参考路径来获取值,但是使用 ace-editor 甚至可以做到这一点吗?

理想情况下,我会以用户友好的方式显示字符串,但保留原始参考值(在元数据或其他内容中),因为这是实际存储在数据库中的内容。

您可以通过为您的规则定义自定义 onMatch 来完成此操作,就像这样

    this.$rules = {
      start: [{
        onMatch: function(value, state, stack) {
          var values = this.splitRegex.exec(value);
          return [{
            type: 'variableRef',
            value: variables[values[1]]
          }]
        },
        regex: /$variable\.(\d+).+$/
      }]
    };

但实际文本将保持不变(因此导致文本 selection/cursor 出现异常),因此您需要 pad/clip 结果 value 以匹配值的长度[0]