2011-12-23 105 views
0

給定兩個字符串,如果兩個字符串都有一個共同的單詞,該如何處理?用JavaScript中的相同單詞匹配兩個字符串

例如:"foo bar""foo line"都有詞"foo"。字符串可以是3個字或更長,如"foo bar""blue foo line"

我試過到目前爲止:

var m = "foo bar"; 
var n = "foo line"; 
if(m.match(/n/g)){ 
    alert("match"); 
} 
+0

上午迷惑你問什麼。 – 2011-12-23 09:20:50

+0

還有其他什麼條件適用?例如,算法是否應區分大小寫?如果只有**一個**(並且不超過一個)字是相同的,它才匹配嗎? – PPvG 2011-12-23 09:32:41

回答

1

http://jsbin.com/iwalam/3/edit

更好的版本:

var m = "foo bar".split(' '); 

var n = "foo line".split(' '); 
var isOk=0; 

    for (var i=0;i<m.length;i++) 
    { 
    for (var j=0;j<n.length;j++) 

    { 
     var reg = new RegExp("^"+m[i]+"$", "gi"); 

    if (n[j].match(reg)) 
    {isOk=1;break;} 
    } 
    } 

if (isOk==1) 
    alert("match"); 
+0

非常感謝。一個問題,'var m =「bar」.split('');','var n =「foo line」.split('');',也匹配。注意**空間**。 – cj333 2011-12-23 09:30:40

+0

@ cj333看到我的編輯 – 2011-12-23 09:31:35

0

這裏有一個更明確的版本,沒有不必要的正則表達式:

function hasWordMatch(a, b, case_sensitive) { 
    if (case_sensitive !== true) { 
     a = a.toLowerCase(); 
     b = b.toLowerCase(); 
    } 
    var a_parts = a.split(' '); 
    var b_parts = b.split(' '); 
    var a_length = a_parts.length; 
    var b_length = b_parts.length; 
    var i_a, i_b; 

    for (i_a = 0; i_a < a_length; i_a += 1) { 
     for (i_b = 0; i_b < b_length; i_b += 1) { 
      if (a_parts[i_a] === b_parts[i_b]) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

console.log(hasWordMatch("foo bar", "foo baz")); // true 
console.log(hasWordMatch("foo bar", "bada bing")); // false 
console.log(hasWordMatch("FOO BAR", "foo baz")); // true 
console.log(hasWordMatch("FOO BAR", "foo baz", true)); // false 

您問題中的正則表達式區分大小寫,但默認情況下此版本不區分大小寫。您可以通過傳遞true作爲第三個參數來區分大小寫。

這也是在向上的jsfiddle:http://jsfiddle.net/WQBSv/

相關問題