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?

Colin Brock
sumber

Jawaban:

211

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

ngangang
sumber
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"
34

indexOfadalah untuk substring polos, searchadalah untuk ekspresi reguler.

Greg
sumber
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.

joel.neely
sumber
7

Saya pikir perbedaan utamanya adalah bahwa pencarian menerima ekspresi reguler.

Periksa referensi ini:

CMS
sumber
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.

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

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

Zameer
sumber
1
Ada perbedaan yang signifikan: searchmengubah string menjadi RegExp, jadi misalnya, str.search("d........e");juga akan cocok dengan karakter 39.
1j01