2011-12-23 18 views
0

2つの文字列を指定すると、両方の文字列に共通の単語がある場合、どうすればよいですか?JavaScriptで同じ単語の2つの文字列を一致させる

たとえば、"foo bar"および"foo line"は、両方とも単語"foo"を持っています。文字列は、"foo bar""blue foo line"のように3語以上の長さにすることができます。

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

アムは、あなたが求めてかについて混乱。 –

+0

その他の条件は適用されますか?たとえば、アルゴリズムは大文字と小文字を区別する必要がありますか? ** 1 **(と複数の単語)の単語が同じ場合にのみ一致するはずですか? – PPvG

答えて

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

+0

@ cj333私の編集したものを見る –

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 
私がこれまで試したどのような

あなたの質問の正規表現は大文字と小文字を区別しますが、このバージョンではデフォルトで大文字と小文字が区別されません。第3引数としてtrueを渡すことで大文字小文字を区別することができます。

それはアップJSFiddleでもあります:http://jsfiddle.net/WQBSv/

関連する問題