ace editor的自定义正则表达式 identifierRegexps 问题

新手上路,请多包涵

在Ace editor里,我想用自定义的补全器去识别点号结尾的string,比如”class.“.以下是自定义补全器:

var customCompleter = {

  // custom prefix to match dot
  identifierRegexps: [/[a-zA-Z_0-9\.\-\u00A2-\uFFFF]/],
  getCompletions: function(editor, session, pos, prefix, callback) {
      console.log("prefix",prefix);
      if (prefix.length === 0) { callback(null, []); return }
      let matches = produceMatch;
      callback(null, matches);
   }
};
// add completer
langTools.addCompleter(customCompleter);
editor.setOptions({enableLiveAutocompletion: 'customCompleter'});

其中遇到两个问题:
1.为了识别点号结尾的string,设置: identifierRegexps: [/[a-zA-Z]+.?$/], 但是这个正则表达式还是不会识别".", 打印出的prefix跟原生补全器的ID_Regex一样只是单纯匹配了string。

2.如果我按照ID_regex的写法:[/[a-zA-Z_0-9$-u00A2-uFFFF]/], 修改为:identifierRegexps: [/[a-zA-Z_0-9.-u00A2-uFFFF]/]. 会出现不识别单个点号的情况:
input: c - prefix: c;
input: c. - no prefix 不打印;
input: c.. - prefix: c..;
input: . - prefix: .;
input: .. - prefix: ..;
为了解决这个问题我尝试取消自动补全改为BasicAutocomplete, 这时却没有了这个问题。

总结一下,第一,一般的正则表达式用在identifierRegexps没有按照预想的去匹配,这里我不太懂ID_Regex的写法有什么不同。第二,为什么自动补全会出现不匹配单个句点,而basic可以。

Ace的源码也看了看,没有什么头绪,望大神解答。

阅读 3.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题