如何检查一个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