Bir magistralın javascriptdə substrinqi olub olmadığını necə yoxlamaq olar?

Normalda, String.contains() gözləmək olardı, ancaq itkin görünür.

Bunu yoxlamaq üçün əsaslı bir üsul nədir?

7436
24 нояб. qram 24 noyabr. 2009-11-24 16:04 '09 at 16:04 2009-11-24 16:04
@ 49 cavab
  • 1
  • 2

Burada mövcud xüsusiyyətlər siyahısı:

1. (ES6) includes - cavab göndərin

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

2. indexOf və yaşlı indexOf

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

String.prototype.indexOf başqa bir simli bir simli mövqeyini qaytarır. Əgər tapılmadıqda, geri qayıdır -1 .

3. search - cavaba gedin

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

4. lodaş daxildir - cavabına gedin

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

5. RegExp - cavab verin

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

6. Maç - cavab verin

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

Performans testləri göstərir ki, sürətli məsələlər olduqda, indexOf ən yaxşı seçim ola bilər.

11502
24 нояб. Cavab Fabien Ménager 24 noyabrda verilir . 2009-11-24 16:05 '09 saat 16:05 'da 2009-11-24 16:05

Bu ifadəni istifadə edərək asanlıqla contains üsul əlavə edə bilərsiniz:

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

Qeyd: istifadə etməyiniz üçün etibarlı bir dəlil üçün aşağıdakı şərhləri baxın. Mənim məsləhətim: öz fikrinizi istifadə edin.

border=0

Alternativ olaraq:

 if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; } 
823
30 дек. Avi Flax cavab 30 Dekabr. 2009-12-30 07:23 '10 at 7:23 pm 2009-12-30 07:23

Kodunuzla problem javascriptun böyük və kiçik həssas olmasıdır. Metod çağırışı

 indexof() 

olmalıdır

 indexof() 

Bunu düzəltməyə çalışın və kömək edirmi?

 if (test.indexOf("title") !=-1) { alert(elm); foundLinks++; } 
429
24 нояб. Cavab verilir Victor 24 noyabr. 2009-11-24 17:17 '09 at 17:17 'da 2009-11-24 17:17

string.includes bir string.includes .

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

Xahiş edirəm ki, bu, köhnə brauzerlərdə işləmək üçün es6-shim və ya oxşar yükləyə es6-shim .

 require('es6-shim') 
361
07 янв. Cavab verilir . 2013-01-07 13:23 '13 at 13:23 2013-01-07 13:23
 var index = haystack.indexOf(needle); 
341
24 нояб. cavab pixeline 24 noyabr verilir . 2009-11-24 16:06 '09 at 16:06, 2009-11-24 16:06

search() JavaScript metodundan istifadə edə bilərsiniz.

Sintaksis: string.search(regexp)

Bir matç mövqeyini qaytarır, ya da bir matç tapılmadıysa -1.

Misallara baxın: jsref_search

Mürəkkəb tərzdə ifadə sintaksisinə ehtiyacınız yoxdur. Əgər onlarla tanış deyilsinizsə, bu, bir sadə st.search("title") edəcəyik. st.search(/title/i) etməliyik.

237
05 марта '10 в 12:53 2010-03-05 12:53 Cavab Tardis tərəfindən 05 Mart 'da saat 12: 53' da verildi. 2010-03-05 12:53

String.prototype.includes() da təqdim edilmişdir.

Bir simli sırasıyla başqa bir dizede bulunup bulunmadığını belirtir;

Sintaksis

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

Parametrlər

 searchString 

Bu simli içərisində axtaran simli.

 position 

Varsayılan olaraq axtarış axtarış searchString başlatmak istediğiniz bu simgedeki konum.

Misal

167
21 окт. Cavab Aniket Kulkarni tərəfindən cümə axşamı 21. 2013-10-21 08:31 '13 saat 08:31 'da 2013-10-21 08:31

Check-ugly-1 yazmaq üçün bir alternativ axtarırsınızsa, bunun əvəzinə bir ~ tilde əlavə edin.

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

Joe Zimmerman - -1-də -1-də istifadə edərək onu 0-ə çevirir. 0 nömrəsi səhvdir, yəni booleana çevrildiyi zaman səhv hesablanır. Əvvəlcə bu çox güclü görünmür, ancaq sorguda bulunamadığında indexOf, return -1 kimi funksiyaları yadda saxlaya bilərsiniz. Bu, belə bir şey yazmaq yerinə deyil:

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

İndi kodda daha az simvol ola bilər, məsələn yaza bilərsiniz:

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

Daha ətraflı məlumat

120
12 мая '14 в 1:22 2014-05-12 01:22 Xristian Landgren tərəfindən 12 May '14 'də 1:22 2014-05-12 01:22 cavab verilir

Kodun bu hissəsi yaxşı işləməli:

 var str="This is testing for javascript search !!!"; if(str.search("for") != -1) { //logic } 
82
29 мая '12 в 10:46 2012-05-29 10:46 Cavab 29 may 2012-ci il saat 10: 46-da vaibhav tərəfindən verilir. 2012-05-29 10:46

Cavab yazmaq üçün ümumi üsul javascriptdədir :

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

Bitsel balans operatoru ( ~ ) -1 (falsey) 'yə çevirmək üçün istifadə olunur və bütün digər dəyərlər qeyri-sıfır (doğru) olacaq.

Nömrələri mantıksal hallara çevirmək üçün ikiqat Boolean inkarları olan operatorlar istifadə olunur.

77
13 сент. Cavab verilir zzzzBov 13 sep . 2012-09-13 06:45 '12 saat 06:45 'da 2012-09-13 06:45

ES5-də

76
08 авг. cavab Nisar 08 avqustda verilir . 2015-08-08 14:44 '15 at 2:44 pm 2015-08-08 14:44

Burada və orada İnternetdə olan kod snippetlərini istifadə etmək əvəzinə yaxşı test edilmiş və sənədləşdirilmiş kitabxanadan istifadə edə bilərsiniz. Tövsiyə etdiyim iki variant:


Variant 1: Lodaşı istifadə edin: includes :

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

Lodash npm üçün ən məşhur javascript kitabxana asılılığıdır və bir çox faydalı javascript yardım metoduna malikdir. Yəni bir çox layihələr üçün hələ də bunu istəyirəm; -)


İkinci variant: Yoxsa Underscore.string istifadə edin: bir include metodu var:

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

Underscore.string'in təsviri burada yalnız 9kb əlavə edir, lakin yaxşı test edilmiş və sənədləşdirilmiş bir kitabxananın surətini kopyala kodu parçaları olan bütün üstünlükləri verir:

Underscore.string, strings'in asan manipulyasiyası, Prototype.js, Right.js, Underlining və gözəl Ruby dilindən ilham alaraq Underscore.js üçün uzadılması üçün bir JavaScript kitabxanasıdır.

Underscore.string bir neçə faydalı funksiyaları təmin edir: capize, təmiz, daxil edin, saymaq, escapeHTML, unescapeHTML, insert, splicing, beginnings, endsWith, başlıqlar, trimming, əkinçilik və s.

Underscore.stringin Underscore.js-dən təsirləndiyini nəzərə alsaq da, onsuz istifadə edilə bilər.


Son, lakin ən azı: Quraşdırılmış metod ES6 JavaScript versiyası ilə gəlir:

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

Ən müasir brauzerlər artıq onu dəstəkləyir, ES6 uyğunluq masasına diqqət yetirirlər.

64
13 дек. Cavab nachtigall 13 dekabr verilir. 2013-12-13 23:05 '13 at 11:05 PM 2013-12-13 23:05

JQuery istifadə edə bilərsiniz :contains selector var.

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

Burada qeyd olun: ehtiva edir

63
14 марта '11 в 5:10 2011-03-14 05:10 Cavab 14 mart, '11 'də saat 05:10 ' da 2011-03-14 05:10 'də Xorinator verildi

Normal bir ifadəni istifadə edin:

RegExp.test(string)

61
24 нояб. Cavab verildi 24 noyabr. 2009-11-24 16:13 '09 at 16:13 2009-11-24 16:13

Yalnız mənim üçün çalışdı. "Silinmiş" termini ehtiva etməyən xəttləri seçir

 if (eventString.indexOf("Deleted:") == -1) 
49
21 окт. cavab verildi yaz 21 oktyabr. 2011-10-21 00:50 '11 at 0:50 2011-10-21 00:50

Bunun bir başqa yolu:

Matç funksiyasından, yəni bir şeydən istifadə edə bilərsiniz:

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

matç () da normal ifadə ilə işləyə bilər:

 x = "teststring"; if (x.match(/test/i)) { // Code } 
49
29 сент. David Craig tərəfindən verilmiş cavab Sep 29 2012-09-29 13:40 '12 'də 13:40' də 2012-09-29 13:40

Siz .indexOf MDN .

indexOf , subscript subscriptini qaytarır. İndeks, substrinqin başladığı yer ilə əlaqəli olacaq. Heç bir matç yoxdursa, -1 qaytarılır. Burada bu konsepsiyanın sadə bir nümayişi var :

29 авг. Travis J tərəfindən verilmiş cavab 29 Avqust. 2013-08-29 02:23 '13 da 2:23 2013-08-29 02:23

Göstərildiyi kimi, "O" sütunu ilə indexOf-a zəng etmək lazımdır. Qeyd etmək lazımdır ki, bir JavaScript sinifində saxlanılan sözdə, bu məlumatın xüsusiyyətini almaq üçün className istifadə etməlisiniz. Başa çatma ehtimalının səbəbi null dəyərin qaytarılmasıdır. Sınıfınızın dəyərini almaq üçün aşağıdakıları edə bilərsiniz ...

 var test = elm.getAttribute("className"); //or var test = elm.className 
48
24 нояб. Cavab MillsJROSS 24 noyabrda verilir 2009-11-24 18:52 '09 da 18:52 'de 2009-11-24 18:52

Sual çox populyar olduğundan, düşündüm ki, kodu bir az əlavə edə bilərsiniz.

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

indexOf , düzgün cavab indexOf və ya qeyri-standart String.contains . Xarici bir kitabxana yükləmə (xüsusilə kodu təmiz javascriptdə String.prototype ) və ya String.prototype ilə String.prototype və ya normal bir ifadə istifadə edərək bir az uzaqlaşdı.

34
27 окт. Jay Harris tərəfindən cavab Oct 27 2013-10-27 18:53 '13 at 18:53 2013-10-27 18:53

Bunu etmək üçün daha parlaq və daha yaxşı bir yol var və operatoru istifadə edir (BitWise NOT).

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

Bitsel "x" - (x + 1) - "x" - ə çevrilmir, beləliklə indexOf metodundan x -1 əldə edildikdə, səhv bir dəyər olan - (-1 + 1) = -0 çevrilir.

27
07 дек. Cavab Kiba 07 dekabr verilir . 2014-12-07 14:05 '14 14:05 2014-12-07 14:05

String.prototype.indexOf() və ya String.prototype.search() ?

Daha əvvəl qeyd edildiyi kimi, JavaScript strings həm indexOf həm də indexOf .

İki arasındakı əsas fərq, indexOf sadə substrinqlər üçün istifadə olunur, search da normal ifadələri dəstəkləyir. Əlbəttə ki, indexOf istifadə etmək üstünlüyü onun daha sürətli indexOf .

Ayrıca JavaScript-da, indexOf () və search () arasındakı fərq nədir? .

Öz String.prototype.contains() həyata keçirmək String.prototype.contains()

Hər bir satana özünüzü contains metodu əlavə etmək istəyirsinizsə, bunun ən yaxşı yolu @zzzzBov olacaq :

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

Bunu aşağıdakı kimi istifadə edərdiniz:

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

Xüsusi bir proqramı həyata keçirir

Məsələn, JavaScript-dəki standart obyektlərə öz metodlarını əlavə etmək tövsiyə edilmir, çünki bu, uyğunluğu poza bilər.

Əgər həqiqətən özünüzü contains metod və / və ya digər xüsusi simli metodlara ehtiyac duyarsanız, bu kitabxana üçün öz kommunal kitabxana yaratmaq və öz simli üsullarınızı əlavə etmək daha yaxşıdır:

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

Bunu aşağıdakı kimi istifadə edərdiniz:

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

Üçüncü tərəfin kommunal kitabxanasından istifadə

Öz dəstəkləyən kitabxanamızı yaratmaq istəmirsinizsə, əlbəttə ki, hər zaman üçüncü tərəfin kommunal kitabxanasından istifadə etmək imkanı var. @Nachtigall qeyd edildiyi kimi, ən məşhur LodaşUnderscore.js var .

Lodaşda aşağıdakı kimi istifadə _.includes() istifadə edə bilərsiniz:

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

Underscore.js-də aşağıdakı kimi istifadə _.str.include() istifadə edə bilərsiniz:

 _.str.include('Hello World', 'orl'); 
24
21 февр. John Slegers tərəfindən verilmiş cavab 21 Feb. 2016-02-21 19:52 '16 'da 19:52 2016-02-21 19:52

Ən sadə həlli

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

Aşağıdakı kimi istifadə edə bilərsiniz

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

23
21 авг. Sriramajeyam Sugumaran tərəfindən verilmiş cavab 21 avqust. 2015-08-21 12:45 '15, saat 12:45 'de, 2015-08-21 12:45
22
08 нояб. Cavab ləğv edildi 2014-11-08 08:38 '14 saat 08:38 'da 2014-11-08 08:38

Misal

 var a = "Test String"; if(a.search("ring")!=-1){ //exist } else { //not found } 
22
12 нояб. Əli Abbasın 12 Noyabrda verdiyi cavabı 2015-11-12 16:11 '15 'də saat 16:11 ' da

Bir dizidəki üsulu istifadə etmək üçün 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 contains metod, müəyyən elementin serialda olub olmadığını müəyyən contains . Göstərilən element sütunda mövcud olsaydı, bu, həqiqətə dönərsə, əks halda yanlış qaytarır.

21
28 февр. Cavab Tarun Gupta tərəfindən verilir 28 fevral. 2013-02-28 10:50 '13 saat 10:50 'da 2013-02-28 10:50

Bəzi etibarlı həllər toplamaq üçün:

19
16 июня '15 в 15:08 2015-06-16 15:08 cavab 16 iyun 15: 15-da verilir. 2015-06-16 15:08

Prototipin istifadəsi ilə bağlı bir şikayət olduğundan və indexOf istifadə kodu daha az oxunaqlı edir və regexp dolu olduğundan:

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

Bu mənim razılığımdır.

17
22 авг. Cavab Tjaart 22 avqustda verilir . 2013-08-22 14:40 '13 saat 14:40 'da 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 дек. Cavab Alain Gauthier tərəfindən verilir 16 dekabr. 2014-12-16 19:48 '14 at 19:48 2014-12-16 19:48

Daxili və ən sadə simli, yəni simli match() istifadə edin. Gözlədiyinizə nail olmaq üçün aşağıdakıları edin:

 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 cavab Ankur Madanan tərəfindən verilir 02 May '14 at 23:08 2014-05-02 23:08

En asan yol indexOf istifadə etməkdir . Sadəcə alt string substrinin substr yoxlamaq üçün bu üsuldan istifadə edə bilərsiniz:

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

string.contains() funksiyasına ehtiyac duyduğunuz kimi, bunu aşağıdakı kimi tətbiq edə bilərsiniz:

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

İndi bir simli xüsusi bir substrinqin olub olmadığını yoxlamaq üçün bu ecen daha qısa metoddan istifadə edə bilərsiniz:

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

Burada JSFiddle edir .

13
27 мая '14 в 15:52 2014-05-27 15:52 cavab 27 may 2014- cü il tarixində saat 15 : 52- də verilir
  • 1
  • 2

tags bağlı digər suallar və ya sual soruşur