2008-12-09 16 views

Respuesta

163

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

+23

¿Alguna referencia para apoyar esta afirmación? – robisrob

+6

Además, 'search' evaluará una cadena en una expresión regular aunque no lo desee. – cregox

+8

El comentario de @ cregox es importante: intente '" hola. ". Search (". ")' - devuelve 0, no 5 porque '.'es el token de expresión regular para" cualquier carácter " – JoeRocc

7

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

Comprobar esta referencia:

12

La función de búsqueda (one description here) toma una expresión regular, lo que le permite igualar contra patrones más sofisticados, las cadenas de mayúsculas y minúsculas , etc., mientras que indexOf (one description here) simplemente coincide con una cadena literal. Sin embargo, indexOf también le permite especificar un índice inicial.

2

La búsqueda encuentra que coincide con una expresión regular, pero no tiene desplazamientos. IndexOf usa literales para hacer coincidir, pero tiene un desplazamiento.

IndexOf

Search

+2

Buscar * does * return an offset. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search – rvighne

0

Sin regex, no hay ninguna diferencia práctica entre indexOf y search.

El ejemplo a continuación da una demo 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>

3

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

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

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

+0

¿Qué devuelve para '" baby/e/lephant ".indexOf (m);'? – RamenChef

+1

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

Cuestiones relacionadas