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

发布于 2022-09-06 20:35:09 字数 1304 浏览 27 评论 0

在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的源码也看了看,没有什么头绪,望大神解答。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文