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 + ' ';
}
}]);
2.另外,return键也有问题。当我在 'Whosebug' 之后键入 'google' 时,它看起来像 'Whosebuggoogle'. 'Whosebug'和'google'之间没有space。我该如何解决?谢谢
问题出在您的 match
选项上,其中只有拉丁词匹配 (\w
)
\w
matches any alphanumeric character including the underscore. Equivalent to [A-Za-z0-9_].
您还应该在正则表达式中包含 Unicode 字符,例如:\u0000-\u007f
这是因为在您的 RegExp 中使用 \s
(注意小 "s"),它也替换了关键字前面的 'space':
\s
matches a single white space character, including space (...)
您可以在那里使用 \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+' ';
}
}]);
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 + ' ';
}
}]);
2.另外,return键也有问题。当我在 'Whosebug' 之后键入 'google' 时,它看起来像 'Whosebuggoogle'. 'Whosebug'和'google'之间没有space。我该如何解决?谢谢
问题出在您的
match
选项上,其中只有拉丁词匹配 (\w
)\w
matches any alphanumeric character including the underscore. Equivalent to [A-Za-z0-9_].您还应该在正则表达式中包含 Unicode 字符,例如:
\u0000-\u007f
这是因为在您的 RegExp 中使用
\s
(注意小 "s"),它也替换了关键字前面的 'space':\s
matches a single white space character, including space (...)您可以在那里使用
\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+' ';
}
}]);