0

当我向 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")
}
4

3 回答 3

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)) ...
于 2013-04-04T21:24:48.077 回答
0

RegExp 需要一个字符串,而不是一个数组。

所以一个一个地检查每个单词:

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 将您的数组强制转换为 String "Knit"。列表中有两个项目,它被强制输入"Knit,Main",并且中间的逗号不再与您的正则表达式匹配。

于 2013-04-04T21:20:33.650 回答
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;
}
于 2013-04-04T21:22:38.193 回答