检查多个单词

时间:2013-04-04 21:16:40

标签: javascript testing words

当我向titleIs Var添加多个单词时,我对此代码有一个问题,它不会触发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")
}

3 个答案:

答案 0 :(得分:2)

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)) ...

答案 1 :(得分:0)

RegExp需要一个String,而不是一个数组。

因此,逐一检查每个单词:

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")
    }
}

它仅适用于Array中的单个项目的原因是Javascript将您的数组强制转换为字符串"Knit"。列表中有两个项目,它被强制转换为"Knit,Main",中间的逗号不再与正则表达式匹配。

答案 2 :(得分: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;
}