Регулярные выражения в JavaScript немного ущербны в отношении не-латинских символов. Так, граница слова
\b
посчитает любой кириллический символ
не-принадлежащим к слову.
Поэтому
\b
надо заменить на "начало строки или пробельный символ, после которого идёт искомые буквы":
(?:^|\\s)
Работающий вариант:
function findMatches( input, query) {
query = query.split(/\s+/);
var i, parts = [];
for(i in query) {
parts.push( '(?=.*(?:^|\\s)' + query[i] + ')');
}
var re = new RegExp('^' + parts.join(''), 'iug');
var matches = [];
for(i in str) {
if( re.test( str[i])) matches.push( str[i]);
}
return matches;
}
var str = [
"Превед веселый медвед"
,"Медведь, тебе привет"
,"ревед веселый едвед"
,"тебе привет"
];
var query = 'Пр мед';
var result = findMatches( str, query); // ["Превед веселый медвед","Медведь, тебе привет"]