2017-02-13 8 views
2

私は検索複数の文字列が

  1. 自我FARAのD16
  2. 自我D16
  3. 自我D22
  4. D16のエゴ
  5. パラ自我DELAのようなリストで "自我D16" を検索してみてください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"] 

私はこれは非常に簡単だと思います。それが明確でない場合は私に教えてください。

関連する問題