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

Jei nemėgstate triukų !!~ ir tt, galite tiesiog pridėti +1 prie .indexOf() rezultato. Taigi, jei eilutė nerasta, -1 + 1 = 0 bus klaidinga, 0.. + 1 = 1.. bus teisinga:

 if ("StackOverflow".indexOf("Stack") + 1 ) alert('contains'); else alert('does not contain'); 
10
31 марта '14 в 1:24 2014-03-31 01:24 Atsakymą pateikė biziclop kovo 31 d. 14, 01:24 2014-03-31 01:24

Paprastas atsakymas veikia 100%

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

Keletas pavyzdžių

 "hello".contains("he") // true "hello world".contains("lo w")//true "hello world".contains("lo wa")//false "hello world".contains(" ")//true "hello world".contains(" ")//false 
9
05 марта '17 в 22:56 2017-03-05 22:56 atsakymą įteikė Kamil Ibadov , kovo 05 d. 17 d. 10:56 2017-03-05 22:56

ES6 programoje turime kažką, kas apima tai, ką norite: taip galite:

 'str1'.includes('str2'); 

Be to, ES5 , jei jį naudosite, galite tiesiog jį pridėti:

 String.prototype.includes = String.prototype.includes || function(str) { return this.indexOf(str) > -1; } 
8
15 апр. Atsakyti Alireza balandžio 15 d. 2017-04-15 06:10 '17 ne 6:10 2017-04-15 06:10

Yra keletas būdų tai padaryti. Dažniausiai naudojamas metodas yra indexOf() . indexOf() grąžina jam perduotą eilutės poziciją kaip argumentą, o -1, jei eilutėje nėra perduotos eilutės.

 let str = "A cat and a dog"; str.indexOf("cat"); // returns 2 str.indexOf("panda"); // returns -1 
7
24 июля '16 в 15:42 2016-07-24 15:42 Atsakymą pateikė Devashish Jaiswal, liepos 24 d., 16 d., 15:42 2016-07-24 15:42

Pabandykite atlikti šiuos veiksmus:

 if ('Hello, World!'.indexOf('orl') !== -1) alert("The string 'Hello World' contains the substring 'orl'!"); else alert("The string 'Hello World' does not contain the substring 'orl'!"); 

Štai pavyzdys: jsfiddle

7
28 нояб. Atsakymas pateikiamas Oliver Ni 28 lapkričio. 2013-11-28 23:56 '13, 23:56, 2013-11-28 23:56

Kita search funkcija:

 var str = "Stack Overflow"; var n = str.search("Overflow"); if (n != -1) alert('String exists') 
7
12 нояб. atsakymas pateiktas kūrėjui MJ 12 lapkričio. 2014-11-12 13:15 '14, 13:15 2014-11-12 13:15

Tai funkcija, skirta patikrinti, ar eilutėje yra eilutė, ar ne:

 function isStringMatch(str, str_to_match) { return (str.indexOf(str_to_match) > -1); } 
7
02 янв. atsakymą pateikė Satish Sharma. 2014-01-02 15:52 '14 at 15:52 2014-01-02 15:52

Naudodami „ECMAScript 2015“ galime naudoti includes()

 let s = "foo"; console.log(s.includes("oo")); 
6
23 сент. atsakymas, kurį pateikė Raman Sahasi rugsėjo 23 d 2016-09-23 12:25 '16 at 12:25 pm 2016-09-23 12:25

Žinau, kad geriausias būdas yra str.indexOf(s) !== -1; http://hayageek.com/javascript-string-contains/

Siūlau kitą būdą ( str.replace(s1, "") !== str ):

6
01 окт. atsakymas, kurį pateikė Sherali Turdiyev 01 spalis 2015-10-01 08:50 '15, 8:50, 2015-10-01 08:50

Galite naudoti indexOf , kuris grąžina linijos padėtį. Jei nebus rastas, jis sugrįš -1. Todėl, jei metodas grąžina -1 , eilutė neegzistuoja.

 var string = "This is a test string", substring = "test"; if(string.indexOf(substring) >= 0) //substring exist else //substring does not exist 
5
31 марта '16 в 15:27 2016-03-31 15:27 atsakymą pateikė vartotojo6139219 kovo 31 d. 15:27 2016-03-31 15:27

Labai paprasta:

 var a = "foo", b= "oo"; if (a.indexOf(substring) !== -1) { // has } 
5
09 июля '17 в 15:40 2017-07-09 15:40 Atsakymas, kurį pateikė Behnam Mohammadi, liepos 09 d. 17, 15:40 2017-07-09 15:40

Taip pat galite tai padaryti.

 var snipers = " Vasily Zaytsev, Simo Hayha, Chris Kyle"; var me = "Josip"; function printSniperStatus (person) { if (aContainsB(snipers, person)) { console.log(person + " is a sniper."); } else { console.log(person + " is NOT a sniper."); } } // Outputs: "Josip is NOT a sniper." printSniperStatus(me); 
5
12 апр. Josip Ivic atsakymas balandžio 12 d 2016-04-12 15:19 '16 at 15:19 2016-04-12 15:19

Nenuostabu, kad čia niekas nepaminėjo KMP. Kas yra KMP? KMP algoritmas suteikia blogiausią galimą linijinio laiko krypties paiešką, todėl tai yra protingas būdas, jei pasirūpinate blogiausiu laiko sudėtingumu. Nuoroda į KMP „JavaScript“ diegimą

3
06 июля '17 в 1:26 2017-07-06 01:26 atsakymas pateikiamas wz366 liepos 06 '17, 1:26 2017-07-06 01:26

Kitas atsakymas ...

Paprastai aš tikiuosi, kad String.contains () metodas, ...

Priklausomai nuo to, ką paprastai reiškia, yra bent vienas būdas, kuris nėra reprezentuotas visuose ankstesniuose atsakymuose.

Tai gali būti naudinga labai konkrečiais atvejais, tačiau:

 var mystring="Foo bar baz" var searchstr="bar" var arraysplt=mystring.split(searchstr) var containbool=typeof(arraysplt[1])=="string"; 

Jei searchstr bent kartą, net mano mystring pabaigoje, tada mystring typeof(split(...)[1]) string (tuščią eilutę). Jei ne, tipas typeof(split(...)[1]) bus undefined .

arba

 typeof( mystring.split( searchstr )[1] ) == "string"; 

Tačiau naudojant šį metodą gali būti naudinga tik tada, kai arraysplt elementai yra naudingi naudoti scenarijuje.

... todėl šis trumpas metodas atrodo visiškai nenaudingas (manau) ...

Bet jei jūsų tikslas yra suskirstyti eilutę, naudokite „ indexOf kad įsitikintumėte, jog nėra separatoriaus.

3
19 янв. Atsakymas pateikiamas F. Hauri sausio 19 d 2017-01-19 13:20 '17 at 13.20 val. 2017-01-19 13:20

2
13 апр. Abi atsakymas, pateiktas balandžio 13 d 2017-04-13 14:04 '17 at 14:04 pm 2017-04-13 14:04

Indekso naudojimas, kurį galima lengvai identifikuoti, pavyzdys:

 var array = [2, 9, 9]; array.indexOf(2); // 0 array.indexOf(7); // -1 array.indexOf(9, 2); // 2 array.indexOf(2, -1); // -1 array.indexOf(2, -3); // 0 

Rezultate komentaras po eilutės

1
29 дек. Atsakymas pateikiamas سیدرسول میرعظیمی 29 dec. 2016-12-29 09:45 '17, 9:45 am 2016-12-29 09:45

Nė vienas iš pirmiau minėtų dalykų man nepadarė, nes ten buvo spragų, bet tai aš padariau

 tr = table.getElementsByTagName("tr"); for (i = 0; i < tr.length; i++) { td = tr[i].getElementsByTagName("td")[0]; bottab.style.display="none"; bottab2.style.display="none"; if (td) { var getvar=td.outerText.replace(/\s+/, "") ; if (getvar==filter){ tr[i].style.display = ""; }else{ tr[i].style.display = "none"; } } } 
0
02 дек. Atsakymą pateikė Kingsley Mitchell 02 Dec. 2017-12-02 20:01 '17, 08:01 pm 2017-12-02 20:01

„IndexOf“ metodas yra geriausias sprendimas, nes jį palaiko visos naršyklės.

Sintaksė: string.indexOf(searchvalue, start)

kur start yra neprivalomas parametras.

0
22 янв. Atsakymą pateikė Suchi sausio 22 d. 2018-01-22 12:29 '18, 12:29 val. 2018-01-22 12:29
 result = 'GBP|1800'; //if pipe delimeter is there it returns true else false. if(result.indexOf("|")) { console.log('go default:' +result); var cur = result.substring(0, 3);//returns GBP console.log('go default cur:' +cur); var minmum_fee = result.substring(4);//gets the substring amount console.log('go default minmum_fee:' +minmum_fee); } else { console.log('not found:' +result); } 
-8
24 окт. Atsakymas pateikiamas kūrėjui 24 okt. 2014-10-24 14:07 „14, 14:07 2014-10-24 14:07
  • 1
  • 2