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


8 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

indexOf () e search ()

  • comum em ambos

    i) retornar a primeira ocorrência do valor procurado

    ii) regressar -1 Se nenhuma correspondência encontrada

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

  • em especial indexOf ()

    i) você pode dar a posição inicial de pesquisa como um segundo argumento

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

  • especial em search ()

valor de pesquisa pode ser uma expressão regular

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

referência

Respondeu 22/04/2019 em 15:15
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