給定兩個字符串,如果兩個字符串都有一個共同的單詞,該如何處理?用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");
}
給定兩個字符串,如果兩個字符串都有一個共同的單詞,該如何處理?用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");
}
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");
非常感謝。一個問題,'var m =「bar」.split('');','var n =「foo line」.split('');',也匹配。注意**空間**。 – cj333 2011-12-23 09:30:40
@ cj333看到我的編輯 – 2011-12-23 09:31:35
這裏有一個更明確的版本,沒有不必要的正則表達式:
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/
上午迷惑你問什麼。 – 2011-12-23 09:20:50
還有其他什麼條件適用?例如,算法是否應區分大小寫?如果只有**一個**(並且不超過一個)字是相同的,它才匹配嗎? – PPvG 2011-12-23 09:32:41