Kaip patikrinti, ar eilutėje yra teksto iš „JavaScript“ rinkmenų?

Gana tiesus. Javascript'e turiu patikrinti, ar eilutėje yra bet kokių masyvo įrašytų antraštių.

94
07 апр. PercivalMcGullicuddy yra apibrėžta 07 Bal. 2011-04-07 17:17 '11, 17:17, 2011-04-07 17:17
@ 14 atsakymų

Nėra nieko, kas tai padarytų už jus, jums reikia užrašyti funkciją.

Jei žinote, kad eilutėse nėra simbolių, kurie yra ypatingi reguliariose išraiškose, galite šiek tiek apgauti, pvz .:

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

... kuri sukuria reguliarią išraišką, kuri atstovauja jūsų siūlomų subpozicijų tarpusavio sąsajas (pvz., one|two ), ir patikrina, ar yra kokių nors atitikmenų bet kuriam iš jų, bet jei bet kuris iš jų yra bet koks simbolis kurie yra ypatingi reguliariose išraiškose ( * , [ ir tt]), turite juos vengti pirmiausia, o geriau tai padaryti tik nuobodu kilpa.

Laisvas gyvenimo pavyzdys


Atnaujinti :

Komentuodamas šį klausimą, Martin klausia apie naują Array#map funkciją ECMAScript5. map nepadeda daug, bet some jų:

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

Tiesioginis pavyzdys (veikia tik šiuolaikinėse naršyklėse)

Turėkite omenyje, tai reiškia šiek tiek pridėtinės vertės, ir jūs turite juos tik ECMAScript5 suderinamuose diegimuose (pvz., Ne IE7 ar ankstesnėse versijose, pvz., Netgi ne IE8), bet vis tiek, jei iš tikrųjų esate šio stiliaus programavimas .. (Ir jūs galėtumėte naudoti ECMAScript5 tarpiklį, tai vieną ar keletą kitų.)

135
07 апр. Atsakymas, kurį pateikė TJ Crowder Apr 07 2011-04-07 17:21 '11, 17:21, 2011-04-07 17:21
 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 } } 
border=0
44
07 апр. Atsakyti raveren 07 balandžio. 2011-04-07 17:21 '11, 17:21, 2011-04-07 17:21
 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); 
18
07 апр. Atsakymą pateikė Jim Blackler 07 balandžio. 2011-04-07 17:28 '11, 17:28, 2011-04-07 17:28

Žmonėms pėsčiomis

Sunkus atsakymas turėtų būti.

 const substrings = ['connect', 'ready']; const str = 'disconnect'; if (substrings.some(v => str === v)) { // Will only return when the 'str' is included in the 'substrings' } 
11
13 июня '15 в 12:52 2015-06-13 12:52 atsakymas duotas puskvubu birželio 13 d., 15 val

Vienos linijos sprendimas

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

Grąžina true\false jei exists\does'nt exist

ES6 parama reikalinga

10
21 сент. Atsakymas suteikiamas Praveenai, rugsėjo 21 d 2017-09-21 09:53 '17 at 9:53 2017-09-21 09:53
 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] } } 

pakeisti: jei bandymų tvarka nesvarbi, galite ją naudoti (tik su vienu kilpos kintamuoju):

 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] } } 
6
07 апр. atsakymas suteiktas vartotojui 07 Bal 2011-04-07 17:23 '11, 17:23, 2011-04-07 17:23

Jei masyvas yra nedidelis, galite tiesiog pažymėti ir patikrinti kiekvienos padėties eilutę atskirai, naudodami indexOf() . Arba galite sukurti įprastą išraišką su matricomis kaip alternatyvas, kurios gali būti arba gali būti ne efektyvesnės.

2
07 апр. Gantautas Miliauskas paskelbė balandžio 07 d 2011-04-07 17:22 '11 at 17:22 PM 2011-04-07 17:22

„Javascript“ funkcija ieškoti žymių ar raktinių žodžių masyvo naudojant paieškos eilutę arba paieškos eilutes. (Naudoja ES5 kai kuriuos masyvo metodus ir ES6 funkcijas )

 // 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; } 

Naudojimo pavyzdys:

 var a = ["a","b","c","d","e"]; var b = ["a","b"]; if ( contains(a, b) ) { // 1 or more matches found } 
2
28 окт. David Douglas atsakymas spalio 28 d 2016-10-28 02:09 '16 at 2:09 2016-10-28 02:09

Naudodami „underscore.js“ arba „lodash.js“, eilutės eilutėje galite atlikti šiuos veiksmus:

 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'] 

Ir vienoje eilutėje:

 var contact = 'Billy'; var filters = ['Bill', 'Sarah']; _.every(filters, function(filter) { return (contact.indexOf(filter) >= 0); }); // true 
0
08 нояб. Atsakymas pateikiamas BuffMcBigHuge 08.11 . 2017-11-08 03:39 '17 at 3:39 2017-11-08 03:39

Remiantis TJ Crowder atsakymu

naudokite ekranuotą „RegExp“, kad patikrintumėte, ar yra bent „vienas“ bent vienas iš jų.