如何检查文本中的任何单词是否在数组中?

给出一个完整的文本,如:

var nation = "Piazza delle Medaglie d'Oro 40121 Bologna Italy" 

和给定的数组如:

  ["Afghanistan", "Italy", "Albania", "United Arab Emirates"] 

我们怎样才能检查整个文本中的意大利语是否在array

按照这个SO答案,这就是我尝试过的,但是我得到了False ,而意大利array存在

  var countries = []; $("#usp-custom-3 option").each(function() { var single = $(this).text(); countries.push(single); var foundPresent = countries.includes("Piazza delle Medaglie d'Oro 40121 Bologna Italy"); console.log(foundPresent); }); 

JsFiddle在这里

如果你在推送到数组时检查它,它甚至更简单,只需检查推送的元素:

 const text = " I like Italy"; const nations=[]; function insert(single){ if( text.includes(single) /*may format single, eg .trim() etc*/){ alert("Nation in text!"); } nations.push(single); } 


如果您仍希望每次都检查整个数组,嵌套迭代可能会这样做:

 let countries = ["Afghanistan", "Italy", "Albania", "United Arab Emirates"]; const text = " I like Italy"; let countriesInText = countries.filter( word => text.includes( word ) ); //["Italy"] 

性能与Rajeshs的回答相比

如果您只关心是否,可以使用.some()而不是.filter()

由于您需要在数组中搜索包含单词的字符串,因此最好选择使用正则表达式并使用string.match(regex)来获取匹配的单词。

 var nation = `Piazza delle Medaglie d'Oro 40121 Bologna Italy`; //var nation = "Piazza delle Medaglie d'Oro 40121 Bologna Italy"; var countries = ["Afghanistan", "Italy", "Albania", "United Arab Emirates"]; var regex = new RegExp(countries.join("|"), "i"); console.log(nation.match(regex)) 
 var nation = "Piazza delle Medaglie d'Oro 40121 Bologna Italy"; searchStringInArray("Italy", nation); function searchStringInArray (str, strArray) { for (var j=0; j 

此脚本将比较var nation中的每个单词与您提供的所有数组元素。 我希望这能解决你的问题

  
 $(function () { try { var nation = "Piazza delle Medaglie d'Oro 40121 Bologna Italy"; var I = ["Afghanistan", "Italy", "Albania", "United Arab Emirates"] for (var index = 0; index < I.length; index++) { if (nation.toString().toUpperCase().indexOf(I[index].toString().toUpperCase()) >= 0) { console.log(I[index].toString()); } } } catch (err) { console.log(err); } }); 

试试这个。