JavaScript 的多个条件 .include() 方法

2022-08-30 01:51:01

只是想知道,有没有办法向 .include 方法添加多个条件,例如:

    var value = str.includes("hello", "hi", "howdy");

想象一下逗号状态“or”。

它现在正在询问字符串是否包含hello,hihowdy。因此,只有当一个,并且只有一个条件为真时。

有没有办法做到这一点?


答案 1

您可以使用此处引用的方法。.some

该方法测试数组中是否有至少一个元素通过了由提供的函数实现的测试。some()

// test cases
const str1 = 'hi hello, how do you do?';
const str2 = 'regular string';
const str3 = 'hello there';

// do the test strings contain these terms?
const conditions = ["hello", "hi", "howdy"];

// run the tests against every element in the array
const test1 = conditions.some(el => str1.includes(el));
const test2 = conditions.some(el => str2.includes(el));
// strictly check that contains 1 and only one match
const test3 = conditions.reduce((a,c) => a + str3.includes(c), 0) == 1;

// display results
console.log(`Loose matching, 2 matches "${str1}" => ${test1}`);
console.log(`Loose matching, 0 matches "${str2}" => ${test2}`);
console.log(`Exact matching, 1 matches "${str3}" => ${test3}`);

此外,正如用户在下面提到的,像上面提到的(并且OP要求)匹配“正好一个”外观也很有趣。这可以通过类似的方式计算与的交点,并在以后检查它们是否等于1。.reduce


答案 2

使用 ,不,但您可以通过以下方式使用正则表达式实现相同的操作:includes()test()

var value = /hello|hi|howdy/.test(str);

或者,如果单词来自动态源:

var words = ['hello', 'hi', 'howdy'];
var value = new RegExp(words.join('|')).test(str);

REGEX方法是一个更好的主意,因为它允许您将单词匹配为实际单词,而不是其他单词的子字符串。你只需要一个单词边界标记,所以:\b

var str = 'hilly';
var value = str.includes('hi'); //true, even though the word 'hi' isn't found
var value = /\bhi\b/.test(str); //false - 'hi' appears but not as its own word