Qual è la differenza tra indexOf () e search ()?


180

Essendo abbastanza nuovo in JavaScript, non sono in grado di discernere quando utilizzare ciascuno di questi.

Qualcuno può aiutarmi a chiarire questo per me?

Risposte:


211

Se hai bisogno di un'espressione regolare, usa search(). Altrimenti, indexOf()sarà più veloce.


32
qualche riferimento a supporto di questa affermazione?
robisrob,

16
Inoltre, searchvaluterà una stringa in una regex anche se non vuoi.
Cregox,

26
Il commento di @ cregox è importante - prova "hello.".search(".")- restituisce 0, non 5 perché .è il token regex per "qualsiasi personaggio"


14

La funzione di ricerca ( una descrizione qui ) assume un'espressione regolare, che ti consente di confrontarti con schemi più sofisticati, stringhe senza distinzione tra maiuscole e minuscole, ecc., Mentre indexOf ( una descrizione qui ) corrisponde semplicemente a una stringa letterale. Tuttavia, indexOf consente anche di specificare un indice iniziale.


7

Penso che la differenza principale sia che la ricerca accetta espressioni regolari.

Controlla questo riferimento:


4

IndexOf () - accetta valori letterali di stringa o oggetti stringa ma non espressioni regolari. Accetta anche un valore intero in base zero da cui iniziare la ricerca, ad esempio:

  1. "Babyelephant" .indexOf ( "e"); // ti dà 4
  2. "Babyelephant" .indexOf ( "E", 5); // ti dà 6 poiché la ricerca inizia dalla 6a posizione o 5o indice.
  3. var m = / e /; "Babyelephant" .indexOf (m); // dà -1 in quanto non accetta espressioni regolari.

Cerca (): accetta sia valori letterali stringa che oggetti stringa ed espressioni regolari. Ma non accetta un indice da cui iniziare la ricerca.


Per cosa torna "baby/e/lephant".indexOf(m);?
RamenChef,

1
buono .. restituirà 4..perché è presente / e / string..ma se vuoi trovare una regex "e" non otterrai il risultato desiderato. UMM forse dovrei modificare la mia risposta a indexOf () cerca di trovare il regex come una stringa letterale e non come una regex.
bablue,

4

indexOf () e search ()

  • comune in entrambi

    i) restituisce la prima occorrenza del valore cercato

    ii) restituisce -1 se non viene trovata alcuna corrispondenza

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

  • speciale in indexOf ()

    i) puoi dare la posizione di ricerca iniziale come secondo argomento

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

  • speciale nella ricerca ()

il valore di ricerca può essere espressione regolare

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

riferimento



-1

Senza regex , non vi è alcuna differenza pratica tra indexOf e la ricerca .

L'esempio seguente mostra una demo live :

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
C'è una differenza significativa: searchconverte una stringa in a RegExp, quindi ad esempio, str.search("d........e");corrisponderà anche al carattere 39.
1j01
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.