String.prototype.indexOf()

Você está lendo a versão em inglês deste conteúdo porque ainda não há uma tradução para este idioma. Ajude-nos a traduzir este artigo!

Sumário

O método indexOf() retorna o índice da primeira ocorrência do valor especificado em searchValue dentro do objeto String para o qual foi chamado, 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 será forçado para "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 pode ser encontrado.
fromIndex
A posição 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.

Retorno

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:

'hello world'.indexOf('') // retorna 0
'hello world'.indexOf('', 0) // retorna 0
'hello world'.indexOf('', 3) // retorna 3
'hello world'.indexOf('', 8) // retorna 8

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

'hello world'.indexOf('', 11) // retorna 11
'hello world'.indexOf('', 13) // retorna 11
'hello world'.indexOf('', 22) // retorna 11

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("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

Sensível a maiúsculas e minúsculas

O método indexOf é sensível a letras maiúsculas e minúsculas. Por exemplo, a expressão a seguir retorna -1:

"Blue Whale".indexOf("blue") // retorna -1

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() e lastIndexOf()

O exemplo a seguir usa indexOf e lastIndexOf 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 do primeiro w partindo do final é " + anyString.lastIndexOf("w")); 
// Exibe 10

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

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

O exemplo a seguir definie duas variáveis string. Elas 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 caixa, 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:

count = 0;
pos = str.indexOf("x");

while ( pos != -1 ) {
   count++;
   pos = str.indexOf( "x",pos + 1 );
}

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

Compatibilidade em navegadores

Estamos convertendo nossos dados de compatibilidade para o formato JSON. Esta tabela de compatibilidade ainda usa o formato antigo, pois ainda não convertemos os dados que ela contém. Descubra como você pode ajudar!
Recurso Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suporte básico (Yes) (Yes) (Yes) (Yes) (Yes)
Recurso Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suporte básico (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Veja também