jquery-textcomplete 无法处理 Unicode 字符,并且缺少 space

jquery-textcomplete not working with Unicode characters, and missing space

1. 我正在尝试将 jquery-textcomplete 与 Unicode 字符串数组一起使用。当我输入英文单词时,它可以正常工作,但没有建议任何 Unicode 单词。我认为问题出在 'term' 上。检查下面的代码,请帮助我:

var words = ['සහන', 'වනක', 'google', 'suresh namal',  'facebook', 'github', 'microsoft', 'yahoo', 'Whosebug'];

$('textarea').textcomplete([{
    match: /(^|\s)(\w{2,})$/,
    search: function (term, callback) {
        callback($.map(words, function (word) {
            return word.indexOf(term) === 0 ? word : null;
        }));
    },
    replace: function (word) {
        return word + ' ';
    }
}]);

JS Fiddle

2.另外,return键也有问题。当我在 'Whosebug' 之后键入 'google' 时,它看起来像 'Whosebuggoogle'. 'Whosebug''google'之间没有space。我该如何解决?谢谢

  1. 问题出在您的 match 选项上,其中只有拉丁词匹配 (\w)

    \w matches any alphanumeric character including the underscore. Equivalent to [A-Za-z0-9_].

    Reference

    您还应该在正则表达式中包含 Unicode 字符,例如:\u0000-\u007f


  1. 这是因为在您的 RegExp 中使用 \s(注意小 "s"),它也替换了关键字前面的 'space':

    \s matches a single white space character, including space (...)

    Reference

    您可以在那里使用 \S(大写 "S")匹配单个字符 而不是 space,以及 *(星号)匹配前面的 space 0 次或更多次。


它可能不是最漂亮的正则表达式,但应该可以满足您的需求:

$('textarea').textcomplete([{
    match: /(^|\S*)([^\u0000-\u007f]{2,}|\w{2,})$/,
    search: function (term, callback) {
        callback($.map(words, function (word) {
            return word.indexOf(term) > -1 ? word : null;
        }));
    },
    replace: function (word) {
        return word+' ';
    }
}]);

JSFiddle