jquery-textcomplete不使用Unicode字符,并且缺少空格

时间:2015-03-18 14:39:18

标签: javascript jquery unicode

1。我正在尝试使用带有Unicode字符串数组的jquery-textcomplete。当我输入英文单词时,它可以正常工作,但不建议使用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''stackoverflow''google'之间没有空格。我怎么解决这个问题?感谢。

1 个答案:

答案 0 :(得分:1)

  1. 问题在于您的match选项,其中只有拉丁字匹配(\w

      

    \w匹配包括下划线在内的任何字母数字字符。相当于[A-Za-z0-9 _]。

    Reference

    您还应该在RegExp中包含unicode字符,例如:\u0000-\u007f


    1. 这是因为在RegExp中使用\s(注意小“s”),它也取代了关键字前面的“空格”:

        

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

      Reference

      你可以使用\S(大写字母“S”)匹配单个字符而非空格,以及与前一个空格匹配的*(星号) 0次或更多次。


    2. 这可能不是最漂亮的RegExp,但应该为你做好工作:

      $('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