我在ace编辑器中使用自定义完成符,希望它能用点检测字符串结尾,例如:'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'});
我设置:identifierRegexps:[/| a-zA-Z] +。?$ /,这个正则表达式在几个在线正则表达式网站上测试得很好。我保持打印前缀,但它不能检测任何点只是纯字符串。与其默认ID_regex(在ex-language_tool中)一样,它将dot视为字符串的结尾。
请参阅情况1我从ID_regex中简单修改了identifierRegexps:identifierRegexps:[/[a-zA-Z_0-9.- \ u00A2- \ uFFFF] /]。现在它可以检测带点的字符串,但只能检测多个点。例如:
输入:c
- 前缀:c
;
输入:c.
- 没有前缀;
输入:c..
- 前缀:c..
;
输入:.
- 前缀:.
;
输入:..
- 前缀:..
;
但有线的是,当我将完成符号更改为基本模式时,它只是顺利进行并给出正确的前缀字符串,但为了满足要求,完成者需要生效。
我认为这可能是因为它在实时模式中切断正则表达式匹配的方式不同。我已经阅读了源代码,但仍然不知道如何解决这个问题。