İndexOf () ve search () arasındaki fark nedir?


180

JavaScript'te oldukça yeni olduğum için, bunların her birini ne zaman kullanacağımı fark edemiyorum.

Herkes benim için bunu açıklığa kavuşturabilir mi?

Yanıtlar:


211

Normal bir ifadeye ihtiyacınız varsa kullanın search(). Aksi takdirde, indexOf()daha hızlı olacak.


32
bu iddiayı desteklemek için herhangi bir referans var mı?
robisrob

16
Ayrıca, searchbir dizeyi istemeseniz bile normal ifadeye dönüştürür.
cregox

26
@ cregox adlı kullanıcının yorumu önemlidir - dene "hello.".search(".")- 5 değil, 0 döndürür çünkü ."herhangi bir karakter" için normal ifade belirteci


14

Arama fonksiyonu ( burada bir açıklama indexOf (iken), vb daha sofistike patters, küçük harf duyarsız dizeleri, karşı maç sağlayan bir düzenli ifade alır bir açıklama burada ) sadece bir hazır dize eşleşir. Ancak, indexOf ayrıca bir başlangıç ​​dizini belirtmenize izin verir.


7

Asıl fark, aramanın düzenli ifadeleri kabul etmesidir.

Bu referansı kontrol edin:


4

IndexOf () - dize değişmezlerini veya dize nesnelerini kabul eder, ancak normal ifadeleri kabul etmez . Ayrıca, aramasını başlatmak için sıfır temelli bir tamsayı değerini de kabul eder, örneğin:

  1. "Babyelephant" .indexOf ( "e" için); // 4 verir
  2. "Babyelephant" .indexOf ( "e", 5); // arama 6. konumdan veya 5. dizinden başladıkça size 6 verir.
  3. var m = / e /; "Babyelephant" .indexOf (m); // düzenli ifadeleri kabul etmediği için -1 verir.

Search () - hem dize değişmezlerini hem de dize nesnelerini ve normal ifadeleri kabul eder. Ancak, aramayı başlatmak için bir dizin kabul etmez.


Ne için dönüyor "baby/e/lephant".indexOf(m);?
RamenChef

1
iyi bir .. 4. dönecektir çünkü / e / string mevcut .. ama eğer bir regex "e" bulmak istiyorsanız istenen sonucu elde etmeyeceksiniz. UMM belki de indexOf () benim cevap değiştirmeliyim regex bir dize değişmez olarak değil regex olarak bulmaya çalışır.
bablue

4

indexOf () ve arama ()

  • ikisinde de ortak

    i) aranan değerin ilk tekrarını döndürür

    ii) eşleşme bulunmazsa -1 döndür

    let str='Book is booked for delivery'
    str.indexOf('b')   // returns position 8
    str.search('b')    // returns position 8 
    

  • indexOf () içinde özel

    i) başlangıç ​​argümanını ikinci bir argüman olarak verebilirsiniz

    str.indexOf('k')   // 3
    str.indexOf('k',4) // 11 (it start search from 4th position) 
    

  • aramada özel ()

arama değeri normal ifade olabilir

str.search('book') // 8
str.search(/book/i)  // 0   ( /i =case-insensitive   (Book == book)

referans



-1

Bir olmadan regex , arasında hiçbir pratik fark yoktur indexOf ve arama .

Aşağıdaki örnek canlı bir demo sunmaktadır :

function FromSearch() {

  var str = document.getElementById("demo").innerText;
  var n = str.search("difference");
  document.getElementById("Location").innerHTML = n;
}

function FromindexOf() {
  var str = document.getElementById("demo").innerText;
  var n = str.indexOf("difference");
  document.getElementById("Location").innerHTML = n;
}
<p id="demo">Without a <a href='http://www.w3schools.com/js/js_regexp.asp'>regex</a>, there is no practical difference between <a href='http://www.w3schools.com/jsref/jsref_indexof.asp'>indexOf</a> and <a href='http://www.w3schools.com/jsref/jsref_search.asp'>search</a>
</p>

<button onclick="FromSearch()">From search</button>

<button onclick="FromindexOf()">From indexOf</button>

<p>Location of difference in the above sentence is:</p>

<mark id="Location"></mark>


1
Önemli bir fark var: searchbir dizgiyi RegExpstr.search("d........e");
a'ya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.