2017-02-13 118 views
2

我嘗試在列表中搜索 「自我D16」 像搜索多個字符串

  1. 自我FARA 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"] 

我覺得這是非常簡單的。如果不清楚,請告訴我。