Вариант 1:
var mask = q.toLowerCase();
var matches =
strs.filter(function(str) {
return str.toLowerCase().includes(mask);
}).sort(function(str1, str2) {
return str1.toLowerCase().indexOf(mask) - str2.toLowerCase().indexOf(mask);
});
Вариант 2:
var re = new RegExp(q, 'i');
var matches =
strs.filter(function(str) {
return str.match(re);
}).sort(function(str1, str2) {
return str1.search(re) - str2.search(re);
});
Минус варианта с регуляркой - можно ввести символы, при которых произойдёт ошибка, например 'ba['.