2013-04-04 65 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