jQuery-textcomplete无法与Unicode字符配合使用,并且缺少空格。

3

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

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

$('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. 另外,回车键有问题。当我在输入完'stackoverflow'后输入'google'时,它出现为'stackoverflowgoogle'而没有空格。我该如何解决?谢谢。

1个回答

1
问题在于您的match选项,只匹配拉丁单词(\w

\w匹配任何字母数字字符,包括下划线。等同于[A-Za-z0-9_]。

参考

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


  • 这是因为在您的RegExp中使用了\s(注意小写"s"),它还替换了关键字前面的空格:

    \s匹配单个空格字符,包括空格(...)

    参考

    您可以使用\S(大写"S")来匹配单个空格字符,再加上一个*(星号),它可以匹配前面的空格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

    {{链接1:JSFiddle}}


    1
    非常感谢Artur Flipiak。您已经清楚地描述了它。谢谢。 - namal
    你能帮我吗?请查看此链接:http://stackoverflow.com/questions/30221748/jquery-textcomplete-not-work-on-contenteditable-div。谢谢。 - namal

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接