2010-11-22 58 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

相关问题