如何检查一个string是否包含JavaScript中的一串子字符的文本?

非常直截了当。 在JavaScript中,我需要检查一个string是否包含数组中保存的任何子string。

没有内置的东西会为你做,你必须为它写一个函数。

如果你知道string不包含任何正则expression式中特殊的字符,那么你可以欺骗一下,就像这样:

 if (new RegExp(substrings.join("|")).test(string)) { // At least one match } 

…它创build一个正则expression式,它是你正在查找的子串的一系列变化 (例如, one|two ),并testing是否有任何匹配,但是如果任何子串包含任何字符在正则expression式( *[等)中是特殊的,你必须首先逃避它们,而不是仅仅做无聊的循环。

无偿的生活的例子


更新

在对这个问题的评论中, Martin询问了ECMAScript5中新的Array#map函数。 map并不是那么有帮助,但some是:

 if (substrings.some(function(v) { return str.indexOf(v) >= 0; })) { // There's at least one } 

现场示例 (只适用于现代浏览器)

请注意,这确实意味着一些开销,而且您只能在符合ECMAScript5的实现上(例如,不是IE7或更早的版本,甚至可能不包括IE8),但是如果您真的参与了这种编程风格的话。 (你可以使用ECMAScript5垫片, 这个或其他几个)。

 var yourstring = 'tasty food'; // the string to check against var substrings = ['foo','bar'], length = substrings.length; while(length--) { if (yourstring.indexOf(substrings[length])!=-1) { // one of the substrings is in yourstring } } 
 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); 

对于人们谷歌search,

坚实的答案应该是。

 var substrings = ['connect', 'ready']; var str = 'disconnect'; if (substrings.some(function(v) { return str === v; })) { // Will only return when the `str` is included in the `substrings` } 
 var str = "texttexttext"; var arr = ["asd", "ghj", "xtte"]; for (var i = 0, len = arr.length; i < len; ++i) { if (str.indexOf(arr[i]) != -1) { // str contains arr[i] } } 

编辑:如果testing的顺序不重要,你可以使用这个(只有一个循环variables):

 var str = "texttexttext"; var arr = ["asd", "ghj", "xtte"]; for (var i = arr.length - 1; i >= 0; --i) { if (str.indexOf(arr[i]) != -1) { // str contains arr[i] } } 

如果数组不大,则可以使用indexOf()逐个循环并检查每个string的string。 另外,你可以构造一个带有子string的正则expression式作为select,这可能会也可能不会更有效。

Javascript函数使用searchstring或searchstring数组search标签或关键字数组。 (使用ES5 一些数组方法和ES6 箭头function

 // returns true for 1 or more matches, where 'a' is an array and 'b' is a search string or an array of multiple search strings function contains(a, b) { // array matches if (Array.isArray(b)) { return b.some(x => a.indexOf(x) > -1); } // string match return a.indexOf(b) > -1; } 

用法示例:

 var a = ["a","b","c","d","e"]; var b = ["a","b"]; if ( contains(a, b) ) { // 1 or more matches found } 

一线解决scheme

 substringsArray.some(substring=>yourBigString.includes(substring)) 

如果substring exists\does'nt exist则返回true\false exists\does'nt exist

需要ES6支持

使用underscore.js或lodash.js,你可以在一个string数组上进行以下操作:

 var contacts = ['Billy Bob', 'John', 'Bill', 'Sarah']; var filters = ['Bill', 'Sarah']; contacts = _.filter(contacts, function(contact) { return _.every(filters, function(filter) { return (contact.indexOf(filter) === -1); }); }); // ['John'] 

并在一个单一的string:

 var contact = 'Billy'; var filters = ['Bill', 'Sarah']; _.every(filters, function(filter) { return (contact.indexOf(filter) >= 0); }); // true