2013-04-04 175 views
0

當我向titleIs添加多個單詞時,此代碼有一個問題,它不會觸發if語句。最上面的一個不起作用,即如果一個單詞在Var titleIs中並且在var單詞中,則激發if語句。檢查多個單詞

謝謝你的幫助!

var titleIs = ['Knit', 'Main']; 
var words = ['Woven', 'Main']; 
var regex = new RegExp('^(' + words.join('|') + ')$'); 
if (regex.test(titleIs)) { 
alert("true") 
} 

這兩項工作:

var titleIs = ['Woven']; 
var words = ['Woven', 'Main']; 
var regex = new RegExp('^(' + words.join('|') + ')$'); 
if (regex.test(titleIs)) { 
alert("true") 
} 

var titleIs = ['Main']; 
var words = ['Woven', 'Main']; 
var regex = new RegExp('^(' + words.join('|') + ')$'); 
if (regex.test(titleIs)) { 
alert("true") 
} 

回答

1

test方法接受一個字符串。 (事實上​​,當你只發送一個元素的數組時,它會考慮到這個元素)。

你必須這樣定義稱爲testAny新方法:

RegExp.prototype.testAny = function (arr){ 
    for(var i=0; i<arr.length; i++){ 
     if (this.test(arr[i])) return true; 
    } 
    return false; 
} 

(其實matchesAny是一個更好的名字 - 在我看來 - 但使用上述名稱,使之與現有的test一致方法)

然後在您的if中使用。

if(regex.testAny(titleIs)) ... 
+0

謝謝!我也用這個:http://stackoverflow.com/questions/15822339/title-attribute-array – user2238083 2013-04-04 21:53:34

+0

URW!儘管'testAny'回答你的問題,如下所述,但我認爲你需要的是定義'Array.prototype.intersects(anotherArray)'。我確信有比使用regEx更快的方法來執行它(正如你在這裏所做的那樣)。 – 2013-04-04 21:56:46

0

正則表達式需要一個字符串,而不是一個數組。

於是逐個檢查每個字一個:

var titleIs = ['Knit', 'Main']; 
var words = ['Woven', 'Main']; 
var regex = new RegExp('^(' + words.join('|') + ')$'); 
for(var i=0; i<titleIs.length; i++){ 
    if (regex.test(titleIs[i])) { 
     alert("true") 
    } 
} 

它與在陣列只是一個單一的項目的原因是,JavaScript是強迫你的數組到字符串"Knit"。列表中的兩個項目被強制爲"Knit,Main",並且中間的逗號不再與您的正則表達式匹配。

+0

如果有多個元素匹配,則會多次提醒。這似乎並不理想。 – 2013-04-04 21:31:29

0

您應在數組中測試每個字符串不把你的整個陣列regex.test

var titleIs = ['Knit', 'Main']; 
var words = ['Woven', 'Main']; 
var regex = new RegExp('^(' + words.join('|') + ')$'); 
for(var i=0;i<titleIs.length;i++) 
if (regex.test(titleIs[i])) { 
alert("true") 
break; 
} 
+0

如果有多個元素匹配,則會多次提醒。這似乎並不理想。 – 2013-04-04 21:31:10

+0

確定然後當第一個元素匹配打破循環,我編輯答案 – 2013-04-04 21:32:20

+0

好,現在它的作品,但我認爲重構總是一個好主意。 (看我的答案)。事實上,如果您首先編寫了單獨的方法,則此錯誤從未發生過:) – 2013-04-04 21:37:58