当我向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")
}
答案 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;
}