Bir dize javascript içinde bir alt dize içerip içermediğini kontrol etmek nasıl?

Normalde, String.contains() ı String.contains() ama eksik görünüyor.

Bunu doğrulamanın makul bir yolu nedir?

7436
24 нояб. Gram 24 Nov ayarlanmış . 2009-11-24 16:04 '09, 16:04 2009-11-24 16:04
@ 49 cevaplar
  • 1
  • 2

İşte mevcut özelliklerin bir listesi:

1. (ES6) includes - cevaba git

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

2. ES5 ve daha eski indexOf

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

String.prototype.indexOf , dize konumunu başka bir dizgede döndürür. Bulunmazsa -1 döndürür.

3. search - cevaba gitme

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

4. lodash içerir - cevaba git

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

5. RegExp - cevaba git

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

6. Maç - cevaplamak için gidin

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

Performans testleri , hızın önemli olması durumunda indexOf en iyi seçenek olabileceğini gösteriyor.

11502
24 нояб. Cevap Fabien Ménager 24 Kasım tarafından verildi . 2009-11-24 16:05 '09 at 16:05 2009-11-24 16:05

Bu ifadeyi kullanarak String yöntemini kolayca ekleyebilirsiniz:

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

Not: kullanmadığınız için geçerli bir argüman için aşağıdaki yorumlara bakınız. Tavsiyem: kendi fikrini kullan.

border=0

Alternatif:

 if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; } 
823
30 дек. Avi Keten cevap 30 Aralık. 2009-12-30 07:23 '10, 07:23, 2009-12-30 07:23

Kodunuzla ilgili sorun, javascript'in büyük / küçük harfe duyarlı olmasıdır. Yöntem çağrısı

 indexof() 

olmalı

 indexof() 

Düzeltmeye çalışın ve yardımcı olup olmadığını görün:

 if (test.indexOf("title") !=-1) { alert(elm); foundLinks++; } 
429
24 нояб. Cevap Victor 24 Kasım'da verildi. 2009-11-24 17:17 '09, 17:17 2009-11-24 17:17

ES6'da bir string.includes var :

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

Bunun eski tarayıcılarda çalışması için es6-shim veya benzerini indirmeniz gerekebileceğini lütfen unutmayın.

 require('es6-shim') 
361
07 янв. cevap eliocs 07 Ocak verilir . 2013-01-07 13:23 13: 23, 2013-01-07, 13:23
 var index = haystack.indexOf(needle); 
341
24 нояб. cevabını 24 nolu pixeline verilir . 2009-11-24 16:06 '09, 16:06 2009-11-24 16:06

search() JavaScript yöntemini kullanabilirsiniz.

Sözdizimi: string.search(regexp)

Bir eşleşmenin konumunu, bir eşleşme bulunmazsa -1 değerini döndürür.

Örneklere bakın: jsref_search

Karmaşık düzenli ifade sözdizimine ihtiyacınız yoktur. Eğer onlara aşina değilseniz, basit bir st.search("title") . st.search(/title/i) küçük harf duyarlı st.search(/title/i) istiyorsanız, st.search(/title/i) yapmanız gerekir.

237
05 марта '10 в 12:53 2010-03-05 12:53 Cevap Tardis tarafından 05.0310 tarihinde 12:53 2010-03-05 12:53 tarihinde verilmiştir.

String.prototype.includes() , ES6'da tanıtıldı.

Bir dizginin başka bir dizgede bulunup bulunmayacağını belirler, sırasıyla doğru veya yanlış döndürür.

sözdizimi

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

parametreler

 searchString 

Bu dize içinde aranacak dize.

 position 

Bu dizgede, arama searchString varsayılan olarak başlatmak istediğiniz searchString .

örnek

167
21 окт. 21 Ekim Aniket Kulkarni tarafından verilen cevap . 2013-10-21 08:31 '13, 08:31, 2013-10-21 08:31

Çirkin -1 yazarken bir alternatif arıyorsanız, yerine ~ tilde ekleyin.

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

Joe Zimmerman - ~ on -1 kullanmanın onu 0'a dönüştürdüğünü göreceksiniz - 0 sayısı yanlış, yani boole dönüştürüldüğünde yanlış olarak hesaplanacak. İlk başta, bu çok güçlü görünmeyebilir, ancak unutmayın, indexOf gibi işlevler, sorgu bulunamadığında -1 döndürür. Bunun anlamı şunun gibi bir şey yazmaktır:

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

Artık kodda daha az karakter olabilir, böylece örneğin yazabilirsiniz:

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

Daha fazla ayrıntı burada

120
12 мая '14 в 1:22 2014-05-12 01:22 Cevap 12 Mayıs '14 tarihinde Christian Landgren tarafından 01:22 2014-05-12 01:22 tarihinde verilmektedir.

Kodun bu kısmı iyi çalışmalıdır:

 var str="This is testing for javascript search !!!"; if(str.search("for") != -1) { //logic } 
82
29 мая '12 в 10:46 2012-05-29 10:46 Cevap Vaibhav tarafından 29 Mayıs 12'de 10:46 2012-05-29 10:46

contains yöntemini JavaScript yazmanın genel yolu :

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

Bitsel negatifleme operatörü ( ~ ), -1 değerini (falsey) dönüştürmek için kullanılır ve diğer tüm değerler sıfır olmaz (doğru).

Çift Boole ihmali olan operatörler sayıları mantıksal olanlara çevirmek için kullanılır.

77
13 сент. Cevap verilir zzzzBov 13 eylül . 2012-09-13 06:45 '12 6: 45'te, 2012-09-13 06:45

ES5’te

76
08 авг. Cevap Nisar 08 Ağustos. 2015-08-08 14:44 '15, 14:44, 2015-08-08 14:44

Burada ve orada Internet'te bulunan kod parçacıklarını kullanmak yerine, iyi test edilmiş ve belgelenmiş bir kitaplığı da kullanabilirsiniz. Tavsiye edebileceğim iki seçenek:


Seçenek 1: Lodash Kullanın : includes :

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

Lodash, npm için en popüler javascript kütüphanesi bağımlılığıdır ve birçok faydalı javascript yardımcı program yöntemine sahiptir. Yani birçok proje için hala bunu istiyorsun; -)


İkinci seçenek: Veya Underscore.string kullanın: bir include yöntemine sahiptir:

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

Underscore.string'in açıklaması, sadece 9kb ekler, ancak iyi test edilmiş ve belgelenmiş bir kütüphanenin copy'n'paste kod parçalarında sahip olduğu tüm avantajları sunar:

Underscore.string, Prototype.js, Right.js, Underlining ve güzel bir Ruby dilinden esinlenerek dizelerin kolay manipülasyonu için bir JavaScript kütüphanesi, Underscore.js için bir eklentidir.

Underscore.string size birçok yararlı fonksiyon sunar: capize, clean, içerir, count, escapeHTML, unescapeHTML, insert, splicing, başlar.

Underscore.string'nin Underscore.js'den etkilendiğini ancak onsuz kullanılabileceğini unutmayın.


Son fakat en az olmayan: Yerleşik includes yöntemi ES6 JavaScript sürümüyle birlikte gelir:

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

Çoğu modern tarayıcı zaten desteklemektedir, ES6 uyumluluk tablosuna dikkat edin.

64
13 дек. Cevap 13 Aralık'ta verilecek. 2013-12-13 23:05 '13 11: 05'de 2013-12-13 23:05

JQuery kullanabilirsiniz :contains seçici :contains .

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

Buraya not edin: içerir-seçici

63
14 марта '11 в 5:10 2011-03-14 05:10 Cevap Chorinator'a 14 Mart, 11'de 5 : 10'da veriliyor 2011-03-14 05:10

Normal bir ifade kullanın:

RegExp.test(string)

61
24 нояб. cevap 24 Kasım rahul verilir. 2009-11-24 16:13 '09, 16:13 2009-11-24 16:13

Sadece benim için çalıştı. "Silindi:" terimini içermeyen satırları seçer.

 if (eventString.indexOf("Deleted:") == -1) 
49
21 окт. cevap writtinfool 21 Ekim verdi. 2011-10-21 00:50 '11 0:50 2011-10-21 00:50

Bunu yapmanın başka bir yolu:

Eşleştirme işlevini kullanabilirsiniz, yani:

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

match () ayrıca normal bir ifadeyle çalışabilir:

 x = "teststring"; if (x.match(/test/i)) { // Code } 
49
29 сент. Tarafından cevap David David 29 Eyl 2012-09-29 13:40 '12 13:40 2012-09-29 13:40

MDN için .indexOf .

indexOf , alt aboneliği döndürür. Dizin, alt dizenin başladığı yer ile ilişkili olacaktır. Eşleşme yoksa, -1 döndürülür. İşte bu kavramın basit bir gösterimi :

29 авг. Cevapla Travis J 29 Aug. 2013-08-29 02:23 '13, 02:23 2013-08-29 02:23

Belirtildiği gibi, "O" harfiyle indexOf'u çağırmanız gerekir. Ayrıca, bir JavaScript sınıfında ayrılmış kelimede, bu veri özelliğini almak için className kullanmanız gerektiğine dikkat edilmelidir. Başarısız olmasının nedeni, boş bir değer döndürmesidir. Sınıfınızın değerini almak için aşağıdakileri yapabilirsiniz ...

 var test = elm.getAttribute("className"); //or var test = elm.className 
48
24 нояб. Cevap MillsJROSS 24 Kas tarafından verilir 2009-11-24 18:52 '09, 18:52 2009-11-24 18:52

Soru oldukça popüler olduğu için koda biraz modern lezzet katabileceğimi düşündüm.

 // 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'); 

String.contains , doğru cevap yanlış indexOf veya standart olmayan String.contains . Harici bir kütüphane String.prototype (özellikle de kod saf javascript ile yazılmışsa) veya String.prototype ile karıştırmak veya normal bir ifade kullanmak biraz fazla uzadı.

34
27 окт. Tarafından cevap Jay Harris Eki 27 2013-10-27 18:53 '13 18:53 2013-10-27 18:53

Bunu yapmanın şık ve daha iyi bir yolu var ve operatörü kullanıyor (BitWise NOT).

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

Bitwise "x" 'i - (x + 1)' e dönüştürmez, bu nedenle indexOf yönteminden x -1 elde edilirse, o zaman sahte bir değer olan - (-1 + 1) = -0 değerine dönüştürülür.

27
07 дек. Cevap Kiba 07 Aralık'ta verildi . 2014-12-07 14:05 '14, 14:05 2014-12-07 14:05

String.prototype.indexOf() veya String.prototype.search()

Daha önce de belirtildiği gibi, JavaScript dizelerinde hem indexOf hem de search .

İkisi arasındaki temel fark, indexOf yalnızca basit alt indexOf kullanılmasıdır; search aynı zamanda düzenli ifadeleri de destekler. Tabii ki, indexOf kullanmanın avantajı daha hızlı olmasıdır.

Ayrıca bakınız JavaScript’te, indexOf () ve search () arasındaki fark nedir? .

Kendi yönteminizi uygulama String.prototype.contains()

Her bir satıra kendi içerme yönteminizi eklemek istiyorsanız, bunu yapmanın en iyi yolu @zzzzBov olacaktır:

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

Aşağıdaki gibi kullanırsınız:

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

Özel bir yardımcı program uygulamak

Genellikle kendi yöntemlerinizi JavaScript'teki standart nesnelere eklemeniz önerilmez, çünkü bu uyumluluğa zarar verebilir.

Gerçekten kendi contains ve / veya diğer özel dize yöntemlerine ihtiyacınız varsa, kendi yardımcı program kitaplığınızı oluşturmak ve kendi kitaplık yöntemlerinizi bu kitaplığa eklemek daha iyidir:

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

Aşağıdaki gibi kullanırsınız:

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

Üçüncü taraf bir yardımcı program kütüphanesi kullanma

Kendi destek kütüphanenizi oluşturmak istemiyorsanız, elbette, her zaman üçüncü taraf bir yardımcı program kütüphanesini kullanma fırsatı vardır. @Nachtigall'den bahsedildiği gibi, en popülerleri Lodash ve Underscore.js'dir .

Lodash'da, aşağıdaki gibi kullandığınız _.includes() kullanabilirsiniz:

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

Underscore.js'de, kullandığınız _.str.include() kullanabilirsiniz:

 _.str.include('Hello World', 'orl'); 
24
21 февр. Tarafından cevap John Slegers 21 Şub. 2016-02-21 19:52 '16, 19:52 2016-02-21 19:52

En basit geçici çözüm

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

Aşağıdaki gibi kullanabilirsiniz

 "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 Bağlantısı

23
21 авг. Cevap Sriramajeyam Sugumaran tarafından 21 Ağustos. 2015-08-21 12:45 '15 12:45, 2015-08-21 12:45
22
08 нояб. cevap user663031 08 Kas. 2014-11-08 08:38 '14, 08:38, 2014-11-08 08:38

örnek

 var a = "Test String"; if(a.search("ring")!=-1){ //exist } else { //not found } 
22
12 нояб. 12 Kasım tarihinde Ali Abbas tarafından verilen cevap 2015-11-12 16:11 '15 16:11, 2015-11-12, 16:11

Bir dizide contains yöntemini kullanmak için JavaScript kodu:

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

Bu kodda, contains yöntemi belirtilen öğenin dizide bulunup bulunmadığını belirler. Belirtilen öğe dizide mevcutsa, true, aksi halde false döndürür.

21
28 февр. Cevap Tarun Gupta 28 Şubat'ta verildi. 2013-02-28 10:50 '13, 10:50 2013-02-28 10:50

Bazı geçerli çözümler toplamak için:

19
16 июня '15 в 15:08 2015-06-16 15:08 Cevap 15 Haziran’da 16: 05’te verilecek 15:08 2015-06-16 15:08

Bir prototip kullanma konusunda bir şikayet olduğundan ve indexOf kullanmak kodunuzu daha az okunabilir kıldığından ve regexp dolu olduğundan:

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

Bu benim bir uzlaşma.

17
22 авг. Cevap Tjaart 22 Ağustos'ta verilir . 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 дек. Cevap Alain Gauthier tarafından 16 Aralık'ta verildi. 2014-12-16 19:48 '14, 19:48 2014-12-16 19:48

Yerleşik ve en basit dizeyi kullanın, örn. Dizedeki match() . Beklediğiniz şeyi elde etmek için aşağıdakileri yapın:

 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 Cevap Ankur Madaan tarafından verildi 02 Mayıs '14 23:08 2014-05-02 23:08

En kolay yol indexOf kullanmaktır. Substring substr string kontrol etmek için bu yöntemi kullanabilirsiniz:

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

string.contains() işlevine ihtiyaç duyduğunuzda, kendiniz aşağıdaki gibi uygulayabilirsiniz:

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

Şimdi bir dize özel bir alt dize içerip içermediğini kontrol etmek için bu ecen kısa yöntemini kullanabilirsiniz:

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

İşte JSFiddle .

13
27 мая '14 в 15:52 2014-05-27 15:52 Cevap 27 Mayıs'ta 14: 15'te 15:52 tarihinde Frieder tarafından verilmiştir. 2014-05-27 15:52
  • 1
  • 2

etiketleri hakkındaki diğer sorular veya Bir soru sorun