2010-11-22 63 views
2

我需要檢查一個string A根據它是否包含另一個string B中的所有單詞 - 以任何順序進行匹配。如何搜索第二個字符串中包含的所有單詞的一個字符串?

所以,讓我們說string A是這樣的:

one two three four five 

而且string B就是其中之一:

one two three // match! 
one three two // match! (order doesn't matter) 
one two six // NOT A MATCH! ('six' is not found in string A) 
one two three four // match! 
one two three four five // match! 
one two three four five seven // NOT A MATCH! ('seven' is not found in string A) 

我怎麼會覺得string Astring B之間的匹配只有有的話在string Bý字在string A(不管任一字符串中的單詞的順序的且不論string A是否包含附加字未在string B找到)被發現?

我不知道jQuery是否有任何特殊功能可以幫助解決這個問題,或者我是否需要嚴格使用純JavaScript來做到這一點?

+0

你有字符串A和字符串B,取每個字從字符串B中檢查它是否存在於字符串A中,如果不存在則返回false,它應該非常簡單。 – kobe 2010-11-22 01:53:59

回答

1

//如果客戶端具有陣列方法,這種方法是efficient-

function commonwords(string, wordlist){ 
    string= string.toLowerCase().split(/\s+/); 
    wordlist= wordlist.toLowerCase().split(/\s+/); 
    return wordlist.every(function(itm){ 
     return string.indexOf(itm)!= -1; 
    }); 
} 

commonwords( '一二三四五', '一二九');

//如果你想任何客戶端來處理它沒有特殊的功能, 可以「解釋」的先進方法 - 陣列

Array.prototype.every= Array.prototype.every || function(fun, scope){ 
    var L= this.length, i= 0; 
    if(typeof fun== 'function'){ 
     while(i<L){ 
      if(i in this && !fun.call(scope, this[i], i, this)) return false; 
      ++i; 
     } 
     return true; 
    } 
    return null; 
} 
Array.prototype.indexOf= Array.prototype.indexOf || function(what, i){ 
    i= i || 0; 
    var L= this.length; 
    while(i< L){ 
     if(this[i]=== what) return i; 
     ++i; 
    } 
    return -1; 
} 
7
  1. 將字符串拆分爲單詞數組。
  2. 對於string A中的每個單詞,分配obj[word] = true;
  3. 對於string B中的每個單詞,檢查是否obj[word] === true;。如果不是,則返回false。
  4. 返回true。

這應該是微不足道的翻譯成代碼。

0

爲什麼不直接在字符串A中創建一組單詞(在JavaScript中使用true值的對象),並檢查它是否包含字符串B中的每個單詞?

你怎麼定義「單詞」? string.split("\\s+");足夠了,還是你在做更有趣的事?

+0

'string.split(「\\ s +」)'很好,是的,這就是我所說的「單詞」。 – 2010-11-22 01:17:44

1
function compare(stringA, stringB) { 
    // split for the words 
    var aa = stringA.split(/\s+/), ab = stringB.split(/\s+/); 
    var ha = {}, hb = {}; 

    // use a hash of the words 
    for (var i = 0; i < aa.length; i ++) ha[aa[i]] = true; 
    for (var j = 0; j < ab.length; j ++) hb[ab[j]] = true; 

    // compare the two sets 
    for (var k in hb) if (!ha.hasOwnProperty(k)) return false; 
    return true; 
} 
+0

這將返回true(但應返回false):'compare('','hasOwnProperty')' – strager 2010-11-22 01:20:14

+0

我想我需要JSLint來發現該錯誤... – 2010-11-22 01:45:36

相關問題