String.prototype.indexOf()

Sumário

O método indexOf() retorna o índice da primeira ocorrência do valor fornecido em searchValue, começando a busca a partir de fromIndex. Retorna -1 se o valor não for encontrado.

Nota: Para o método de Array, veja Array.prototype.indexOf().

Sintaxe

str.indexOf(searchValue[, fromIndex])

Parâmetros

searchValue
Uma string representando o valor a ser buscado. Se nenhuma string for fornecida explicitamente, searchValue terá o valor de undefined, e esse valor será buscado na string atual. Por exemplo, 'undefined'.indexOf() retornará 0, já que undefined é encontrado na posição 0. Já 'undefine'.indexOf() retornará -1, já que undefined não pôde ser encontrado.
fromIndex
Um número inteiro representando um índice da string original a partir da qual a busca deve começar. Por padrão é 0. Se fromIndex < 0, a string toda é percorrida (equivale a passar 0). Se fromIndex >= str.length, o método retornará -1, já que a busca será iniciada após o final da string.

Valor retornado

O índice da primeira ocorrência de searchValue, ou -1 se não for encontrado.

Uma string vazia no searchValue produz resultados estranhos. Sem fromIndex, ou com qualquer fromIndex menor que o comprimento da string, o valor retornado é o próprio fromIndex:

'Olá, mundo'.indexOf('') // retorna 0
'Olá, mundo'.indexOf('', 0) // retorna 0
'Olá, mundo'.indexOf('', 3) // retorna 3
'Olá, mundo'.indexOf('', 8) // retorna 8

Entretanto, com qualquer fromIndex igual ou maior que o comprimento da string, o valor retornado é o comprimento da string:

'Olá, mundo'.indexOf('', 11) // retorna 10
'Olá, mundo'.indexOf('', 13) // retorna 10
'Olá, mundo'.indexOf('', 22) // retorna 10

Descrição

Caracteres em uma string são indexados da esquerda para a direita. O índice do primeiro caractere é 0, e o índice do último caractere de uma string chamada stringName é stringName.length - 1.

"Blue Whale".indexOf("Blue");     // retorna  0
"Blue Whale".indexOf("Whale");    // retorna  5
"Blue Whale".indexOf("Blute");    // retorna -1
"Blue Whale".indexOf("Whale", 0); // retorna  5
"Blue Whale".indexOf("Whale", 5); // retorna  5
"Blue Whale".indexOf("Whale", 7); // retorna -1
"Blue Whale".indexOf("");         // retorna  0
"Blue Whale".indexOf("", 9);      // retorna  9
"Blue Whale".indexOf("", 10);     // retorna 10
"Blue Whale".indexOf("", 11);     // retorna 10

Verificando ocorrências

Note que um retorno 0 não implica em true, e -1 não implica em false. Portanto, a maneira correta de se verificar se uma string específica está contida em outra string seria:

"Blue Whale".indexOf("Blue") !== -1; // true
"Blue Whale".indexOf("Bloe") !== -1; // false

Exemplos

Usando indexOf()

O exemplo a seguir usa indexOf() para localizar valores dentro da string "Brave new world".

var anyString = "Brave new world";

console.log("O índice do primeiro w partindo do começo é " + anyString.indexOf("w"));
// Exibe 8

console.log("O índice de 'new' partindo do começo é " + anyString.indexOf("new"));
// Exibe 6

indexOf() e sensibilidade a maiúsculas e minúsculas

O exemplo a seguir define duas variáveis string. Ambas contém a mesma string, exceto que a segunda string tem letras maiúsculas. O primeiro método console.log() exibe 19. Porém, como o método indexOf é sensível a letras maiúsculas e minúsculas, a string "cheddar" não é encontrada em myCapString, portanto, o segundo método console.log() exibe -1.

var myString    = "brie, pepper jack, cheddar";
var myCapString = "Brie, Pepper Jack, Cheddar";

console.log('myString.indexOf("cheddar") é ' + myString.indexOf("cheddar"));
// Exibe 19
console.log('myCapString.indexOf("cheddar") é ' + myCapString.indexOf("cheddar"));
// Exibe -1

Usando indexOf() para contar as ocorrências de uma letra numa string

O exemplo a seguir atribui à variável count o número de ocorrências da letra x na string str:

const str = 'Serx ou não ser, eisx a questão'
count = 0;
pos = str.indexOf("x"); // retorna 3

while ( pos != -1 ) {
   count++;
   pos = str.indexOf( "x", pos + 1 /* o mesmo que 3 + 1 */ );
}

console.log(count);

Especificações

Especificação Situação Comentário
ECMAScript 1st Edition (ECMA-262) Padrão Definição inicial.
ECMAScript 5.1 (ECMA-262)
The definition of 'String.prototype.indexOf' in that specification.
Padrão
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'String.prototype.indexOf' in that specification.
Padrão

BCD tables only load in the browser

Veja também