Qual é a diferença entre indexOf () e search ()?


180

Sendo relativamente novo no JavaScript, não consigo discernir quando usar cada um deles.

Alguém pode ajudar a esclarecer isso para mim?

Respostas:


211

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


32
alguma referência para apoiar esta reivindicação?
— robisrob

16
Além disso, searchavaliará uma string em uma regex, mesmo que você não queira.
— 22416 cregox

26
@ comentário de cregox é importante - tentativa "hello.".search(".")- ele retorna 0, não 5, porque .é o regex token para "qualquer caractere"


14

A função de pesquisa ( uma descrição aqui ) usa uma expressão regular, que permite comparar com padrões mais sofisticados, seqüências que não diferenciam maiúsculas de minúsculas etc., enquanto indexOf ( uma descrição aqui ) simplesmente corresponde a uma sequência literal. No entanto, indexOf também permite especificar um índice inicial.


7

Eu acho que a principal diferença é que a pesquisa aceita expressões regulares.

Verifique esta referência:


4

IndexOf () - aceita literais de string ou objetos de string, mas não expressões regulares. Ele também aceita um valor inteiro baseado em zero para iniciar sua pesquisa, por exemplo:

  1. "babyelephant" .indexOf ("e"); // te dá 4
  2. "babyelephant" .indexOf ("e", 5); // fornece 6 quando a pesquisa começa na 6ª posição ou no 5º índice.
  3. var m = / e /; "babyelephant" .indexDe (m); // fornece -1, pois não aceita expressões regulares.

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


Para que ele retorna "baby/e/lephant".indexOf(m);?
— RamenChef

1
bom .. ele retornará 4 .. porque / e / string está presente .. mas se você quiser encontrar um regex "e", não obterá o resultado desejado. UMM, talvez eu deva modificar minha resposta para indexOf () tenta encontrar o regex como uma string literal e não como um regex.
— bablue 5/09/16

4

indexOf () e search ()

  • comum em ambos

    i) retorna a primeira ocorrência do valor pesquisado

    ii) retorne -1 se nenhuma correspondência for encontrada

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

  • especial em indexOf ()

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

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

  • especial em pesquisa ()

valor da pesquisa pode ser expressão regular

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

referência



-1

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

O exemplo abaixo fornece uma demonstração ao 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
Há uma diferença significativa: searchconverte uma string em um RegExp, por exemplo, str.search("d........e");também corresponderá no caractere 39.
— 1j01 21/01/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.