2017-02-13 8 views
2

Я пытаюсь искать «эго D16» в списке, какпоиска несколько строк в предложениях

  1. эго Фара d16
  2. эго d16
  3. эго D22
  4. d16 эго
  5. пара эго Дела d16

Должны привести линии (1, 2, 4, 5) ...

Мой код

var filter = $(this).val(); //like 'ego d16' 
$("#rezultate li").each(function() { 
    if ($(this)[0].getAttribute('tags').toLowerCase().search(new RegExp(filter, "i")) < 0) { 
     $(this).hide(); 
    } else { 
     $(this).show() 
    } 
}); 

Мой реальный результат только линия (2)

Как я могу это исправить? Благодаря!

+0

Java не является Javascript. – ajb

+0

Похоже, вам просто нужно сделать регулярное выражение для 'd16' ... –

+0

Должно ли оно также соответствовать' dela d16' (без 'ego'?) –

ответ

2

Это неудовлетворительный код, но он чист и прост для понимания. Он должен делать то, что вы ожидаете. Идея состоит в том, чтобы разделить вход и проверить, какие элементы в указанном вами списке содержат каждую часть исходного ввода. Если в строке отсутствует часть входа, совпадения нет.

var search = "ego d16"; //Input 
var strings = ["ego fara d16","ego d16","ego d22","d16 ego","para ego dela d16"] //Test Strings 

var searchItems = search.split(" "); //Array of all separate words in 'search' 
var results = []; //Indexes of all matches 
for (var i = 0; i < strings.length; i++) 
{ 
    var inside = true; 
    for (var j = 0; j < searchItems.length; j++) 
    { 
     if (!strings[i].includes(searchItems[j])) 
     { 
      inside = false; 
     } 
    } 
    if (inside) 
    { 
     results.push(i) 
    } 
} 

Это не должно быть трудно придумать лучший метод, хотя

2

Что-то вроде этого достаточно просто, я думаю:

let list = [ 
    "ego fara d16", 
    "ego d16", 
    "ego d22", 
    "d16 ego", 
    "fred flintstone", 
    "para ego dworda d16", 
    "para d16" 
]; 
let filters = "ego d16".split(/\s+/); 


list.filter(phrase => filters.every(word => phrase.indexOf(word) > -1)); 
//=> ["ego fara d16", "ego d16", "d16 ego", "para ego dworda d16"] 

Я думаю, что это довольно просто. Дайте мне знать, если это не ясно.