Kaip patikrinti, ar eilutėje yra „JavaScript“ eilutė?

Paprastai tikiuosi String.contains() , bet atrodo, kad trūksta.

Kas yra pagrįstas būdas tai patikrinti?

7436
24 нояб. set gramm 24 nov. 2009-11-24 16:04 '09, 16:04 2009-11-24 16:04
@ 49 atsakymai
  • 1
  • 2

Čia pateikiamas dabartinių funkcijų sąrašas:

1. (ES6) includes - eikite į atsakymą

 var string = "foo", substring = "oo"; string.includes(substring); 

2. ES5 ir senesni indexOf

 var string = "foo", substring = "oo"; string.indexOf(substring) !== -1; 

String.prototype.indexOf grąžina eilutės poziciją kitoje eilutėje. Jei nebus rastas, jis sugrįš -1 .

3. search - eikite į atsakymą

 var string = "foo", expr = /oo/; string.search(expr); 

4. Lankas apima - eikite į atsakymą

 var string = "foo", substring = "oo"; _.includes(string, substring); 

5. RegExp - eikite į atsakymą

 var string = "foo", expr = /oo/; // no quotes here expr.test(string); 

6. Rungtynės - eikite į atsakymą

 var string = "foo", expr = /oo/; string.match(expr); 

Veiklos testai rodo, kad indexOf gali būti geriausias pasirinkimas, jei kalbama apie tai, kad greitis yra svarbus.

11502
24 нояб. Atsakymą pateikė Fabien Ménager 24 nov. 2009-11-24 16:05 '09, 16:05, 2009-11-24 16:05

Naudodami šį pareiškimą galite lengvai pridėti contains metodą į eilutę:

 String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; 

Pastaba: žr. Toliau pateiktus komentarus dėl galiojančio argumento, kad jis nenaudojamas. Mano patarimas: naudok savo nuomonę.

border=0

Arba:

 if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; } 
823
30 дек. Avi linų atsakymas - gruodžio 30 d. 2009-12-30 07:23 '10, 7:23 am. 2009-12-30 07:23

Su jūsų kodu susijusi problema yra tai, kad javascript yra didžiosios ir mažosios raidės. Metodas skambinti

 indexof() 

turi būti

 indexof() 

Pabandykite ją išspręsti ir pažiūrėkite, ar ji padeda:

 if (test.indexOf("title") !=-1) { alert(elm); foundLinks++; } 
429
24 нояб. Atsakymas pateikiamas Victor 24 lapkričio. 2009-11-24 17:17 '09, 17:17, 2009-11-24 17:17

string.includes yra string.includes .

 "potato".includes("to"); > true 

Atkreipkite dėmesį, kad jums gali tekti atsisiųsti es6-shim ar panašius, kad tai veiktų senesnėse naršyklėse.

 require('es6-shim') 
361
07 янв. atsakymas pateikiamas „ eliocs 07“. 2013-01-07 13:23 '13, 13:23, 2013-01-07 13:23
 var index = haystack.indexOf(needle); 
341
24 нояб. atsakymas suteikiamas „ pixeline“ 24 nov. 2009-11-24 16:06 '09, 16:06, 2009-11-24 16:06

Galite naudoti search() JavaScript“ metodą.

Sintaksė: string.search(regexp)

Grąžina rungtynės poziciją, arba -1, jei atitikimas nebuvo rastas.

Žr. Pavyzdžius: jsref_search

Jums nereikia sudėtingos reguliarios išraiškos sintaksės. Jei nesate susipažinę su jais, tai atliks paprastą st.search("title") . Jei norite, kad jūsų testas būtų nejautrus, turite atlikti st.search(/title/i) .

237
05 марта '10 в 12:53 2010-03-05 12:53 Atsakymą pateikė Tardis kovo 5 d. 10 val. 12:53 2010-03-05 12:53

String.prototype.includes() buvo įvestas String.prototype.includes() .

Nustato, ar vieną eilutę galima rasti kitoje eilutėje, atitinkamai grąžinant tikrąją ar klaidingą.

Sintaksė

 var contained = str.includes(searchString [, position]); 

Parametrai

 searchString 

Šią eilutę ieškote eilutėje.

 position 

Vieta šioje eilutėje, kurioje norite pradėti paieškos paieškos searchString pagal nutylėjimą 0.

Pavyzdys

167
21 окт. Aniket Kulkarni atsakymas spalio 21 d. 2013-10-21 08:31 '13, 08:31 am 2013-10-21 08:31

Jei ieškojote alternatyvos rašyti čekį-negražią -1, vietoj to pridėkite „tilde“.

 if (~haystack.indexOf('needle')) alert('found'); 

Joe Zimmerman - pamatysite, kad naudojant ~ į -1 konvertuoja jį į 0. Numeris 0 yra klaidingas, o tai reiškia, kad jis bus apskaičiuotas kaip klaidingas, kai jis bus konvertuojamas į loginį. Iš pradžių tai neatrodo labai stipri, tačiau atminkite, kad funkcijos, pvz., IndexOf, grįžta -1, kai užklausa nerasta. Tai reiškia, kad vietoj to, kad rašytumėte kažką panašaus:

 if (someStr.indexOf("a") >= 0) { // Found it } else { // Not Found } 

Dabar kode gali būti mažiau simbolių, kad galėtumėte rašyti, pavyzdžiui:

 if (~someStr.indexOf("a")) { // Found it } else { // Not Found } 

Daugiau informacijos rasite čia

120
12 мая '14 в 1:22 2014-05-12 01:22 Atsakymą pateikė Christian Landgren gegužės 14 d., 14 d. 1:22 2014-05-12 01:22

Ši kodo dalis turėtų veikti gerai:

 var str="This is testing for javascript search !!!"; if(str.search("for") != -1) { //logic } 
82
29 мая '12 в 10:46 2012-05-29 10:46 atsakymą pateikė vaibhav , gegužės 29 d. 12, 10:46 2012-05-29 10:46

Bendras būdas rašyti turinio metodą „JavaScript“ :

 if (!String.prototype.contains) { String.prototype.contains = function (arg) { return !!~this.indexOf(arg); }; } 

Bitų neigimo operatorius ( ~ ) naudojamas -1 paversti į 0 (falsey), o visos kitos vertės bus nulinės (tiesa).

Operatoriai, turintys dvigubą Būlio neigimą, naudojami skaičiams išversti į loginius.

77
13 сент. atsakymas pateikiamas zzzzBov 13 sep . 2012-09-13 06:45 '12 at 6:45 am 2012-09-13 06:45

ES5

76
08 авг. atsakymas pateikiamas Nisar 08 rug. 2015-08-08 14:44 '15, 14:44 pm 2015-08-08 14:44

Užuot naudoję čia ir ten esančius kodo fragmentus internete, galite naudoti gerai išbandytą ir dokumentuotą biblioteką. Du variantai, kuriuos norėčiau rekomenduoti:


1 variantas: naudokite Lodash : jame includes :

 _.includes('foobar', 'ob'); // → true 

Lodash yra populiariausia „JavaScript“ bibliotekos priklausomybė nuo „npm“ ir turi daug naudingų „JavaScript“ naudingumo metodų. Taigi daugeliui projektų vis dar norite to padaryti; -)


Antrasis variantas: Arba naudokite „ Underscore.string“ : jis include metodą:

 _.str.include('foobar', 'ob'); // → true 

Čia pateikiamas „Underscore.string“ aprašymas, jis tik prideda 9kb, bet suteikia jums visus privalumus, kuriuos gerai išbandyta ir dokumentuota biblioteka turi „copy“ neaktyvus kodo fragmentus:

„Underscore.string“ yra „JavaScript“ biblioteka, skirta lengvai valdyti stygas, „Underscore.js“ plėtinys, įkvėptas „Prototype.js“, „Right.js“, „pabraukimas“ ir gražus Ruby kalba.

Underscore.string suteikia jums keletą naudingų funkcijų: užrašyti, išvalyti, įtraukti, suskaičiuoti, paleistiHTML, unescapeHTML, įterpti, sujungti, pradėti, su galais, antraštėmis, apipjaustymu, apkarpymu ir kt.

Atminkite, kad „Underscore.string“ veikia „ Underscore.js“ , bet gali būti naudojamas be jo.


Paskutinis, bet ne mažiau svarbus dalykas: įmontuotas komplektavimo metodas pateikiamas su ES6 „JavaScript“ versija:

 'foobar'.includes('ob'); // → true 

Dauguma šiuolaikinių naršyklių jau ją palaiko, atkreipkite dėmesį į ES6 suderinamumo lentelę .

64
13 дек. Atsakymas pateikiamas nachtigall 13 d. 2013-12-13 23:05 '13, 11:05 PM 2013-12-13 23:05

Galite naudoti jQuery :contains selektorius.

 $("div:contains('John')") 

Pastaba čia: yra-selektorius

63
14 марта '11 в 5:10 2011-03-14 05:10 atsakymas pateikiamas Chorinator, kovo 14 d., 11 d., 5:10 am. 2011-03-14 05:10

Naudokite įprastą išraišką:

RegExp.test(string)

61
24 нояб. atsakymas pateikiamas rahul 24 lapkričio. 2009-11-24 16:13 '09, 16:13, 2009-11-24 16:13

Jis tik dirbo man. Jis pasirenka eilutes, kuriose nėra termino „Ištrinta:“

 if (eventString.indexOf("Deleted:") == -1) 
49
21 окт. atsakymas duotas writtinfool Oct 21. 2011-10-21 00:50 '11 prie 0:50 2011-10-21 00:50

Kitas būdas tai padaryti yra:

Galite naudoti atitikties funkciją, ty kažką panašaus:

 x = "teststring"; if (x.match("test")) { // Code } 

atitikimas () taip pat gali dirbti su įprastine išraiška:

 x = "teststring"; if (x.match(/test/i)) { // Code } 
49
29 сент. David Craig atsakymas rugsėjo 29 d 2012-09-29 13:40 '12 13:40 2012-09-29 13:40

Ieškojote .indexOf MDN .

indexOf grąžins indexOf . Indeksas bus koreliuojamas su tuo, kur prasideda antraštė. Jei nėra rungtynių, grąžinamas -1. Čia pateikiamas paprastas šios koncepcijos demonstravimas :

29 авг. Travio J atsakymas 29 rug. 2013-08-29 02:23 '13, 2:23, 2013-08-29 02:23

Turite skambinti „indexOf“ su „O“ sostine, kaip nurodyta. Taip pat reikėtų pažymėti, kad „JavaScript“ klasės rezervuotame žodyje turite naudoti „className“, kad gautumėte šį duomenų atributą. Priežastis, dėl kurios ji gali nepavykti, yra ta, kad ji grąžina nulinę vertę. Jūs galite atlikti šiuos veiksmus, kad gautumėte savo klasės vertę ...

 var test = elm.getAttribute("className"); //or var test = elm.className 
48
24 нояб. Atsakymą pateikia „ MillsJROSS“ lapkričio 24 d 2009-11-24 18:52 '09, 18:52, 2009-11-24 18:52

Kadangi klausimas yra gana populiarus, aš maniau, kad kodui galėčiau pridėti šiek tiek šiuolaikinio skonio.

 // const : creates an immutable constant const allLinks = document.getElementsByTagName("a"); // [].reduce.call : gives access to the reduce method on a HTMLCollection // () => {} : ES6 arrow function const foundLinks = [].reduce.call(allLinks, (sum, link) => { // bitwise OR : converts the boolean value to a number return sum + (link.classList.contains("title") | 0); }, 0); // template literal console.log('Found ${foundLinks || "no"} title class'); 

BTW, teisingas atsakymas yra neteisingas String.contains . String.prototype išorinė biblioteka (ypač jei kodas yra parašytas grynu javascript) arba String.prototype su String.prototype arba naudojant įprastą išraišką, šiek tiek per toli.

34
27 окт. Atsakymas Jay Harris 27 spalis 2013-10-27 18:53 '13, 18:53, 2013-10-27 18:53

Yra švelnus ir geresnis būdas tai padaryti ir jis naudoja operatorių (BitWise NOT).

 if(~"John".indexOf("J")) { alert("Found") } else { alert("Not Found"); } 

Bituojant nėra konvertuojama „x“ į - (x + 1), taigi, jei x gaunamas -1 iš indexOf metodo, tada jis bus konvertuojamas į - (-1 + 1) = -0, kuris yra klaidinga vertė.

27
07 дек. Atsakymas pateikiamas Kiba 07 d. 2014-12-07 14:05 '14, 14:05, 2014-12-07 14:05

String.prototype.indexOf() arba String.prototype.search() ?!

Kaip jau minėta, „JavaScript“ stygos turi tiek indexOf tiek search .

Pagrindinis skirtumas tarp šių dviejų yra tas, kad indexOf naudojamas tik paprastoms indexOf , o search taip pat palaiko reguliarias išraiškas. Žinoma, indexOf privalumas yra tas, kad jis yra greitesnis.

Taip pat žr . „JavaScript“, koks skirtumas tarp indexOf () ir paieškos ()? .

Savo metodo įgyvendinimas String.prototype.contains()

Jei norite kiekvienai eilutei pridėti savo turinį , geriausias būdas tai padaryti būtų @zzzzBov :

 if (!String.prototype.contains) { String.prototype.contains = function (arg) { return !!~this.indexOf(arg); }; } 

Jūs jį naudosite taip:

 'Hello World'.contains('orl'); 

Individualizuotos programos įgyvendinimas

Paprastai nerekomenduojama pridėti savo metodų į standartinius „JavaScript“ objektus, nes tai gali pažeisti suderinamumą.

Jei jums tikrai reikalingas jūsų pačių contains ir (arba) kiti pasirinktiniai eilutės metodai, geriau sukurti savo įrankių biblioteką ir pridėti savo eilutės metodus šiai bibliotekai:

 var helper = {}; helper.string = { contains : function (haystack, needle) { return !!~haystack.indexOf(needle); }, ... }; 

Jūs jį naudosite taip:

 helper.string.contains('Hello World', 'orl'); 

Naudojant trečiosios šalies programinės įrangos biblioteką

Jei nenorite sukurti savo pagalbinės bibliotekos, žinoma, visada yra galimybė naudoti trečiosios šalies programinės įrangos biblioteką. Kaip minėta @nachtigall , populiariausi yra Lodash ir Underscore.js .

„Lodash“ galite naudoti _.includes() , kurį naudojate taip:

 _.includes('Hello World', 'orl'); 

„Underscore.js“ galite naudoti _.str.include() , kurį naudojate taip:

 _.str.include('Hello World', 'orl'); 
24
21 февр. John Slegers atsakymas 21 vasaris 2016-02-21 19:52 '16 at 19:52 2016-02-21 19:52

Paprasčiausias sprendimas

 if (!String.prototype.contains) { String.prototype.contains= function() { return String.prototype.indexOf.apply(this, arguments) !== -1; }; } 

Galite naudoti taip

 "hello".contains("he") // true "hello world".contains("lo w")//true "hello world".contains("lo wa")//false "hello world".contains(" ")//true "hello world".contains(" ")//false 

MDN nuoroda

23
21 авг. atsakymas, kurį pateikė Sriramajeyam Sugumaran 2015-08-21 12:45 '15 , 12:45 val. 2015-08-21 12:45
22
08 нояб. atsakymą pateikė user663031 08 Nov. 2014-11-08 08:38 '14, 8:38 am 2014-11-08 08:38

Pavyzdys

 var a = "Test String"; if(a.search("ring")!=-1){ //exist } else { //not found } 
22
12 нояб. Ali Abbas atsakymas lapkričio 12 d 2015-11-12 16:11 '15, 16:11 2015-11-12 16:11

„JavaScript“ kodas, skirtas naudoti masyvo turinį:

 <html> <head> <h2>Use of contains() method</h2> <script> Array.prototype.contains = function (element) { for (var i = 0; i < this.length; i++) { if (this[i] == element) { return true; } } return false; } arr1 = ["Rose", "India", "Technologies"]; document.write("The condition is "+arr1.contains("India")+"<br>"); </script> </head> <b>[If the specified element is present in the array, it returns true otherwise returns false.]</b> </html> 

Šiame kode esantis metodas nustato, ar nurodytas elementas yra masyve, ar ne. Jei nurodytas elementas yra matricoje, jis grąžinamas tiesa, kitaip jis grąžina klaidingą.

21
28 февр. Atsakymą pateikė Tarun Gupta 28 vasaris. 2013-02-28 10:50 '13, 10:50, 2013-02-28 10:50

Jei norite rinkti keletą galiojančių sprendimų:

19
16 июня '15 в 15:08 2015-06-16 15:08 atsakymas pateikiamas birželio 16 d. 15 val. 15:08 2015-06-16 15:08

Kadangi yra skundas dėl prototipo naudojimo, ir kadangi indexOf leidžia jūsų kodui mažiau skaityti ir nuo regexp yra pilnas:

 function stringContains(inputString, stringToFind) { return (inputString.indexOf(stringToFind) != -1); } 

Tai kompromisas, kurį turiu.

17
22 авг. atsakymas suteiktas Tjaartui 22 rug . 2013-08-22 14:40 '13, 14:40, 2013-08-22 14:40

„Javascript“

  var str = "My big string contain apples and oranges"; var n = str.indexOf("apples"); alert(n); //will alert 22, -1 if not found 

Jquery

  <p>My big string contain apples and oranges</p> alert($("p:contains(apples)")[0] != undefined); //will alert true if found 
17
16 дек. Atsakymą pateikė Alain Gauthier, gruodžio 16 d. 2014-12-16 19:48 '14, 19:48, 2014-12-16 19:48

Naudokite integruotą ir paprastiausią eilutę, ty match() eilutėje. Norėdami pasiekti tai, ko tikitės, atlikite šiuos veiksmus:

 var stringData ="anyString Data"; var subStringToSearch = "any"; // This will give back the substring if matches and if not returns null var doesContains = stringData.match(subStringToSearch); if(doesContains !=null) { alert("Contains Substring"); } 
13
02 мая '14 в 23:08 2014-05-02 23:08 atsakymą pateikė Ankur Madaan 02 gegužės 14 d. 23:08 2014-05-02 23:08

Lengviausias būdas yra naudoti indexOf . Norėdami paprasčiausiai patikrinti string substrato string , galite naudoti šį metodą:

 string = "asdf"; substr = "as"; alert(string.indexOf(substr) == -1 ? false : true); 

Kadangi jums reikia funkcijos string.contains() , galite ją įgyvendinti patys:

 String.prototype.contains = function(test) { return this.indexOf(test) == -1 ? false : true; }; 

Dabar galite naudoti šį trumpesnį ecen metodą, kad patikrintumėte, ar eilutėje yra specialus antraštė:

 string = "asdf"; alert(string.contains("as")); 

Čia yra JSFiddle .

13
27 мая '14 в 15:52 2014-05-27 15:52 atsakymą frieder davė gegužės 27 d. 14 d. 15:52 2014-05-27 15:52
  • 1
  • 2