如何检查数组的元素是不是存在于字符串中
Posted
技术标签:
【中文标题】如何检查数组的元素是不是存在于字符串中【英文标题】:How to check if an element of an array is present in a string如何检查数组的元素是否存在于字符串中 【发布时间】:2013-10-31 23:06:03 【问题描述】:我已经在这里阅读了一些问题,但似乎无法准确找到我正在寻找的内容。基本上,我需要知道数组中存在的任何元素是否存在于字符串中。一个例子:
var currentHref = "http://www.vorcu.com/hello";
var urls = [
"vorcu.com",
"neutronico.com",
"word2.com"
];
所以,我需要知道“urls”中的任何元素是否与“currentHref”中存在的任何文本一致。有什么想法吗?
谢谢!
【问题讨论】:
让我向您介绍for loop。 :) jQuery or javascript strstr的可能重复 您将不得不遍历数组。听起来可能很难看,但如果有其他方法,我会(高兴地)感到惊讶 【参考方案1】:遍历数组并使用搜索:
str.search(arrItem)
将返回匹配的位置,如果没有找到则返回-1。
【讨论】:
indexOf 更好,除非你使用正则表达式【参考方案2】:类似这样的:
for (var i = 0; i < urls.length; i++)
if (currentHref.indexOf(urls[i]) != -1)
alert(urls[i]); // found occurence, break or continue
或者RegExp方式(以上方式优先):
var isInArray = RegExp(urls.join('|')).test(currentHref); // true|false
或
var matches = currentHref.match(urls.join('|')); // array of matches ["vorcu.com"]
【讨论】:
别忘了转义你的正则表达式...new RegExp(urls.join('|').replace(/[\.\^$*+?()[\\]/g,'\\$&'),'g').test(currentHref)
@zamnuts 首选for
-way 的另一个原因:)【参考方案3】:
每个人都在提供 Javascript 答案(我完全支持),但仅仅因为你提到 jQuery,我想我会提供一个替代方案:
var curHref = window.location.hostname.split('.'),
// i imagine your static string was just for test purposes
checkHref = curHref[1]+'.'+curHref[2],
urls = [
"vorcu.com",
"neutronico.com",
"word2.com"
];
if($.inArray(checkHref,urls) > -1)
// its in there, do your magic
这将创建我假设您想要检查的对象(主机名减去 www),以及它是否与使用 jQuery inArray 方法的 urls
中的任何项目匹配。
【讨论】:
工作就像一个魅力!谢谢!【参考方案4】:类似下面的函数应该可以工作:
function containsAny(str, arr)
for (var i = 0; i < arr.length; i++)
if (str.indexOf(arr[i]) !== -1)
return true;
return false;
或者你可以使用更慢但更简洁的:
RegExp(arr.join('|')).exec(str);
【讨论】:
【参考方案5】:您可以使用some
方法,许多浏览器都支持该方法:
var currentHref = "http://www.vorcu.com/hello";
var urls = [
"vorcu.com",
"neutronico.com",
"word2.com"
];
var containsAny = urls.some(function(x) return currentHref.indexOf(x) >= 0; );
为了与不支持 some
的浏览器兼容,我链接的 MDN 文章提供了一个您可以使用的实现。
【讨论】:
【参考方案6】:创建一个 foreach 然后检查 indexOf ;)
【讨论】:
JavaScript 中没有 foreach。 @undefined 从技术上讲是的,Array.forEach
,虽然这不是这个用例的最佳选择以上是关于如何检查数组的元素是不是存在于字符串中的主要内容,如果未能解决你的问题,请参考以下文章