2011-12-08 22 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()只返回搜索1假的,但search2,3是也是如此。我如何編寫一個簡單的搜索算法來識別單詞可能沒有按照正確順序或聚集在一起的情況?

+4

你想要搜索算法是什麼?如果任何單詞在目標短語中,則返回true?如果所有單詞都在目標短語中,但以任意順序返回,則返回true?如果大多數單詞都在目標短語中,則返回true? – jfriend00

+0

此外,您是否需要僅匹配整個單詞或允許子字匹配? – jfriend00

+0

對於分詞和整詞匹配返回true – 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); 
} 

這種算法並不強制字邊界上,所以搜索「的」將匹配如果目標中含有「和」或「答案」。執行單詞邊界將需要更多的代碼來理解有效的單詞邊界是什麼。

+0

你比我快;) –

+1

@methuselah - 我不明白你在什麼類型的數據中搜索什麼。你能描述一下你在代碼中想要做什麼嗎?你試圖尋找什麼樣的數據結構? – jfriend00