Em JavaScript, o que é a diferença entre indexOf () e search ()?

votos
145

Sendo bastante novo para JavaScript, eu sou incapaz de discernir quando usar cada uma delas.

Alguém pode ajudar a esclarecer isso para mim?

Publicado 09/12/2008 em 21:25
fonte usuário
Em outras línguas...                            


7 respostas

votos
167

Se você precisar de uma expressão regular, use search(). Caso contrário, indexOf()vai ser mais rápido.

Respondeu 09/12/2008 em 21:29
fonte usuário

votos
28

indexOfé para substrings simples, searchpode fazer expressões regulares.

Respondeu 09/12/2008 em 21:28
fonte usuário

votos
12

A função de pesquisa ( uma descrição aqui ) toma uma expressão regular, que lhe permite corresponder contra mais padrões sofisticados, cordas maiúsculas e minúsculas, etc., enquanto indexOf ( uma descrição aqui ) simplesmente corresponde a uma string literal. No entanto, indexOf também permite que você especifique um índice de início.

Respondeu 09/12/2008 em 21:31
fonte usuário

votos
7

Acho que a principal diferença é que a busca aceitam expressões regulares.

Verifique esta referência:

Respondeu 09/12/2008 em 21:30
fonte usuário

votos
3

IndexOf () - aceita strings literais ou objetos string, mas não expressões regulares. Ele também aceita um valor inteiro baseado em zero para começar sua busca a partir de, por exemplo:

  1. "Babyelephant" .indexOf ( "e"); // dá-lhe 4
  2. "Babyelephant" .indexOf ( "E", 5); // lhe dá 6 como a busca começa a partir de 6ª posição ou 5ª índice.
  3. var m = / E /; "Babyelephant" .indexOf (m); // dá -1 como aquilo não aceita expressões regulares.

Search () - aceita tanto strings literais ou objetos string e expressões regulares. Mas ele não aceita um índice para iniciar a pesquisa de.

Respondeu 05/09/2016 em 14:20
fonte usuário

votos
2

Pesquisa descobre que é corresponde com uma expressão regular, mas não tem deslocamentos. IndexOf usa literais para corresponder, mas tem um offset.

Índice de

Pesquisa

Respondeu 09/12/2008 em 21:32
fonte usuário

votos
0

Sem um regex , não há nenhuma diferença prática entre indexOf e pesquisa .

O exemplo abaixo dá uma viva demonstração :

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>

Respondeu 15/12/2015 em 07:02
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more