非常直截了当。在javascript中,我需要检查字符串是否包含数组中持有的任何子字符串。
当前回答
基于t。j。克劳德的答案
使用转义的RegExp测试至少一个子字符串的“至少一次”出现。
函数buildSearch(substrings) { 返回新的RegExp( 子字符串 . map(函数(s) {s.replace返回 (/[.*+?^${}()|[\]\\]/ g , '\\$&');}) .join('{1,}|') + '{1,}' ); } var pattern = buildSearch(['hello','world']); console.log(模式。测试('你好')); console.log(模式。Test ('what a wonderful world')); console.log(模式。Test ('my name is…'));
其他回答
单线解决方案
substringsArray.some(substring=>yourBigString.includes(substring))
如果子字符串存在\不存在,则返回true\false
需要ES6支持
function containsAny(str, substrings) {
for (var i = 0; i != substrings.length; i++) {
var substring = substrings[i];
if (str.indexOf(substring) != - 1) {
return substring;
}
}
return null;
}
var result = containsAny("defg", ["ab", "cd", "ef"]);
console.log("String was found in substring " + result);
没有内置的东西可以帮你做这个,你必须为它写一个函数,尽管它可以只是一个对某些数组方法的回调。
有两种方法:
数组一些方法 正则表达式
数组的一些
数组some方法(在ES5中添加)使这非常简单:
if (substrings.some(function(v) { return str.indexOf(v) >= 0; })) {
// There's at least one
}
更好的箭头函数和newish includes方法(都是ES2015+):
if (substrings.some(v => str.includes(v))) {
// There's at least one
}
生活例子:
const substrings = ["one", "two", "three"]; let str; // Setup console.log(`Substrings: ${substrings}`); // Try it where we expect a match str = "this has one"; if (substrings.some(v => str.includes(v))) { console.log(`Match using "${str}"`); } else { console.log(`No match using "${str}"`); } // Try it where we DON'T expect a match str = "this doesn't have any"; if (substrings.some(v => str.includes(v))) { console.log(`Match using "${str}"`); } else { console.log(`No match using "${str}"`); }
正则表达式
如果你知道字符串不包含任何正则表达式中的特殊字符,那么你可以欺骗一下,像这样:
if (new RegExp(substrings.join("|")).test(string)) {
// At least one match
}
...这将创建一个正则表达式,它是您正在寻找的子字符串的一系列更改(例如,one|two),并测试是否有匹配它们中的任何一个,但如果任何子字符串包含正则表达式中的任何特殊字符(*,[等),您必须首先转义它们,您最好只做无聊的循环。有关如何逃离它们的信息,请参阅这个问题的答案。
生活例子:
const substrings = ["one", "two", "three"]; let str; // Setup console.log(`Substrings: ${substrings}`); // Try it where we expect a match str = "this has one"; if (new RegExp(substrings.join("|")).test(str)) { console.log(`Match using "${str}"`); } else { console.log(`No match using "${str}"`); } // Try it where we DON'T expect a match str = "this doesn't have any"; if (new RegExp(substrings.join("|")).test(str)) { console.log(`Match using "${str}"`); } else { console.log(`No match using "${str}"`); }
var str = "A for apple" var subString = ["apple"] console.log (str.includes (subString))
let obj = [{name : 'amit'},{name : 'arti'},{name : 'sumit'}];
let input = 'it';
使用滤镜:
obj.filter((n)=> n.name.trim().toLowerCase().includes(input.trim().toLowerCase()))