Sendo relativamente novo no JavaScript, não consigo discernir quando usar cada um deles.
Alguém pode ajudar a esclarecer isso para mim?
Sendo relativamente novo no JavaScript, não consigo discernir quando usar cada um deles.
Alguém pode ajudar a esclarecer isso para mim?
Respostas:
Se você precisar de uma expressão regular, use search()
. Caso contrário, indexOf()
será mais rápido.
search
avaliará uma string em uma regex, mesmo que você não queira.
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.
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:
Search () - aceita literais de string ou objetos de string e expressões regulares. Mas ele não aceita um índice para iniciar a pesquisa.
"baby/e/lephant".indexOf(m);
?
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)
valor da pesquisa pode ser expressão regular
str.search('book') // 8
str.search(/book/i) // 0 ( /i =case-insensitive (Book == book)
A pesquisa encontra suas correspondências com uma expressão regular, mas não possui deslocamentos. IndexOf usa literais para corresponder, mas tem um deslocamento.
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>
search
converte uma string em um RegExp
, por exemplo, str.search("d........e");
também corresponderá no caractere 39.