Apa perbedaan antara indexOf () dan search ()?


180

Menjadi cukup baru untuk JavaScript, saya tidak dapat membedakan kapan harus menggunakan masing-masing.

Adakah yang bisa membantu menjelaskan ini untuk saya?

Jawaban:


211

Jika Anda memerlukan ekspresi reguler, gunakan search(). Kalau tidak, indexOf()akan lebih cepat.


32
ada referensi untuk mendukung klaim ini?
Robisrob

16
Juga, searchakan mengevaluasi string menjadi regex bahkan jika Anda tidak mau.
cregox

26
Komentar @ cregox penting - coba "hello.".search(".")- mengembalikan 0, bukan 5 karena .merupakan token regex untuk "karakter apa pun"


14

Fungsi pencarian ( satu deskripsi di sini ) mengambil ekspresi reguler, yang memungkinkan Anda untuk mencocokkan dengan patters yang lebih canggih, string case-insensitive, dll., Sementara indexOf ( satu deskripsi di sini ) cukup cocok dengan string literal. Namun, indexOf juga memungkinkan Anda menentukan indeks awal.


7

Saya pikir perbedaan utamanya adalah bahwa pencarian menerima ekspresi reguler.

Periksa referensi ini:


4

IndexOf () - ia menerima string literal atau objek string tetapi bukan ekspresi reguler. Ia juga menerima nilai integer berbasis nol untuk memulai pencariannya, misalnya:

  1. "babyelephant" .indexOf ("e"); // memberimu 4
  2. "babyelephant" .indexOf ("e", 5); // memberi Anda 6 saat pencarian dimulai dari posisi ke-6 atau indeks ke-5.
  3. var m = / e /; "babyelephant" .indexOf (m); // memberi -1 karena tidak menerima ekspresi reguler.

Search () - menerima string literal atau objek string dan ekspresi reguler. Tetapi tidak menerima indeks untuk memulai pencarian.


Untuk apa ia kembali "baby/e/lephant".indexOf(m);?
RamenChef

1
bagus .. itu akan kembali 4..karena / e / string hadir..tapi jika Anda ingin menemukan regex "e" Anda tidak akan mendapatkan hasil yang diinginkan. UMM mungkin saya harus memodifikasi jawaban saya ke indexOf () mencoba menemukan regex sebagai string literal dan bukan sebagai regex.
bablue

4

indexOf () dan search ()

  • umum di keduanya

    i) mengembalikan kemunculan pertama dari nilai yang dicari

    ii) return -1 jika tidak ditemukan kecocokan

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

  • spesial di indexOf ()

    i) Anda dapat memberikan posisi pencarian awal sebagai argumen kedua

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

  • spesial dalam pencarian ()

nilai pencarian dapat berupa ekspresi reguler

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

referensi



-1

Tanpa regex , tidak ada perbedaan praktis antara indexOf dan pencarian .

Contoh di bawah ini memberikan demo langsung :

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
Ada perbedaan yang signifikan: searchmengubah string menjadi RegExp, jadi misalnya, str.search("d........e");juga akan cocok dengan karakter 39.
1j01
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.