2011-12-08 14 views
3

JavaScriptで簡単な検索アルゴリズムを書いています。JavaScript indexOf文の改良

var title = "The Greatest Movie Ever Made is here!"; 
var search1 = "the greATEST movie"; 
var search2 = "here IS made" 
var search3 = "ever movie greatest the" 

のindexOfを()のみがsearch1偽を返しますが、同様に真search2,3ある使用。単語が正しい順序でないか、まとまっていないインスタンスを認識するために、単純な検索アルゴリズムをどのように書くのですか?

+4

検索アルゴリズムを何にしますか?単語がターゲットフレーズに含まれている場合はtrueを返します。すべての単語がターゲットのフレーズに含まれていても、順序は問わない場合はtrueを返します。大部分の単語がターゲットのフレーズに含まれている場合はtrueを返します。 – jfriend00

+0

また、単語全体のみを一致させる必要がありますか、またはサブワード一致が許可されていますか? – jfriend00

+0

サブワードと全単語の一致に真を返す – methuselah

答えて

4

ここでは、検索文字列内のすべての単語が大文字と小文字や単語の境界に関係なくターゲットに存在するかどうかを示す関数があります。

function findMatch(data, target) { 
    var words = data.toUpperCase().split(/\s/); 
    if (words.length === 0) {return(false);} 
    var uTarget = target.toUpperCase().replace(/\s/, ""); 
    var matchCnt = 0; 
    for (var i = 0; i < words.length; i++) { 
     if (uTarget.indexOf(words[i]) != -1) { 
      ++matchCnt; 
     } 
    } 
    return(matchCnt === words.length); 
} 

このアルゴリズムではワード境界が強制されないため、ターゲットに "and"または "answer"が含まれていると "an"の検索が一致します。単語境界を強制するには、有効な単語境界が何であるかを理解するコードが少し必要です。

+0

あなたは私より早かった;) –

+1

@methuselah - どのような種類のデータで何を探しているのか分かりません。あなたのコードで何をしようとしているのか記述できますか?どのデータ構造を検索しようとしていますか? – jfriend00