¿Cuál es la diferencia entre indexOf () y search ()?


180

Siendo bastante nuevo en JavaScript, no puedo discernir cuándo usar cada uno de estos.

¿Alguien puede ayudar a aclarar esto para mí?

Respuestas:


211

Si necesita una expresión regular, use search(). De lo contrario, indexOf()va a ser más rápido.


32
alguna referencia para apoyar este reclamo?
robisrob

16
Además, searchevaluará una cadena en una expresión regular, incluso si no lo desea.
cregox

26
El comentario de @ cregox es importante: intente "hello.".search("."), devuelve 0, no 5 porque .es el token regex para "cualquier personaje"


14

La función de búsqueda ( una descripción aquí ) toma una expresión regular, que le permite comparar con patrones más sofisticados, cadenas que no distinguen entre mayúsculas y minúsculas, etc., mientras que indexOf ( una descripción aquí ) simplemente coincide con una cadena literal. Sin embargo, indexOf también le permite especificar un índice inicial.


7

Creo que la principal diferencia es que la búsqueda acepta expresiones regulares.

Verifique esta referencia:


4

IndexOf (): acepta literales de cadena u objetos de cadena pero no expresiones regulares. También acepta un valor entero basado en cero para comenzar su búsqueda, por ejemplo:

  1. "babyelephant" .indexOf ("e"); // te da 4
  2. "babyelephant" .indexOf ("e", 5); // te da 6 cuando la búsqueda comienza desde la 6ta posición o el 5to índice.
  3. var m = / e /; "babyelephant" .indexOf (m); // da -1 ya que no acepta expresiones regulares.

Search (): acepta tanto literales de cadena como objetos de cadena y expresiones regulares. Pero no acepta un índice para comenzar la búsqueda.


¿Para qué vuelve "baby/e/lephant".indexOf(m);?
RamenChef

1
bueno ... devolverá 4 ... porque / e / string está presente ... pero si desea encontrar una expresión regular "e" no obtendrá el resultado deseado. UMM tal vez debería modificar mi respuesta a indexOf () intenta encontrar la expresión regular como un literal de cadena y no como una expresión regular.
bablue

4

indexOf () y search ()

  • común en ambos

    i) devuelve la primera aparición del valor buscado

    ii) devuelve -1 si no se encuentra coincidencia

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

  • especial en indexOf ()

    i) puede dar la posición de búsqueda inicial como segundo argumento

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

  • especial en search ()

el valor de búsqueda puede ser una expresión regular

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

referencia



-1

Sin una expresión regular , no hay diferencia práctica entre indexOf y search .

El siguiente ejemplo ofrece una demostración en vivo :

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
Hay una diferencia significativa: searchconvierte una cadena en un RegExp, por ejemplo, str.search("d........e");también coincidirá con el carácter 39.
1j01
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.