我想对字符串执行一个简单的搜索,看它是否包含所有的几个搜索项,不敏感的态度。测试JavaScript字符串是否包含任何顺序的所有多个值,并且不区分大小写
例如,“快速棕色狐狸”包含单词“狐狸”和“快速”,所以我想要一个功能,可以采取这两个单词,并表明该短语包含他们两个,不管他们的顺序。
所以我想我要求的是一个基于字符串的“AND”搜索。
我想对字符串执行一个简单的搜索,看它是否包含所有的几个搜索项,不敏感的态度。测试JavaScript字符串是否包含任何顺序的所有多个值,并且不区分大小写
例如,“快速棕色狐狸”包含单词“狐狸”和“快速”,所以我想要一个功能,可以采取这两个单词,并表明该短语包含他们两个,不管他们的顺序。
所以我想我要求的是一个基于字符串的“AND”搜索。
一个简单的解决方案是使用array.every()
方法来检查每个搜索项是否包含在一个字符串中。
我指定的搜索字词作为单个字符串,将用空格进行分割:
var haystackString = "The quick brown fox";
var needleString = "fox quick";
var searchTerms = needleString.split(" ");
return searchTerms.every(function stringContains(element, index, array) {
return haystackString.toUpperCase().includes(element.toUpperCase());
});
以上将返回true
。
请注意,toUpperCase()
可能不适用于所有语言。
将术语数组转换为RegExp。然后使用String#match查找字符串中的所有匹配项。如果匹配的数量是相同的项数,它包含了所有的人:
var str = 'The quick brown fox';
function containsAll(str, terms) {
var regexp = new RegExp(`\\b(${terms.join('|')})\\b`, 'gi');
var matches = str.match(regexp);
return matches !== null && matches.length === terms.length;
}
console.log(containsAll(str, ['fox', 'quick']));
console.log(containsAll(str, ['cat', 'quick']));