Verificar se uma string contém uma palavra é uma tarefa muito comum em toda linguagem de programação. Existem várias formas de verificar se uma string contém uma palavra ou substring em JavaScript. Veja abaixo a forma mais correta, implementada no ES6, e também outra forma amplamente utilizada.
Utilizando o método includes()
O método includes()
é a forma oficial de se verificar se uma string está contida dentro de outra string. O método retorna true
ou false
.
'Olá mundo'.includes('mundo'); // true
Note que o método includes()
é case sensitive, portanto caso você queira buscar por uma string independente se for maiúscula ou minúscula, você pode fazer o seguinte:
'OLÁ MUNDO'.includes('mundo'); // false
'OLÁ MUNDO'.toLowerCase().includes('mundo'); // true
Você pode, opcionalmente, passar um segundo parâmetro para indicar onde começar procurando pela substring:
'ABCDE'.includes('A', 0); // true
'ABCDE'.includes('A', 1); // false
'ABCDE'.includes('B', 1); // true
O método String.prototype.includes()
foi implementado no JavaScript em 2015 na versão ES6, portanto ele pode não ser suportado em navegadores mais antigos, por exemplo, o Internet Explorer. Compatibilidade do método includes.
Polyfill
Você pode forçar facilmente a implementação do método includes()
através do polyfill abaixo:
if (!String.prototype.includes) {
String.prototype.includes = function() {
'use strict';
return String.prototype.indexOf.apply(this, arguments) !== -1;
};
}
Inclua este trecho de código no inicio do seu bundle (ex: app.js), e a função includes vai estar disponível mesmo em um navegador que não suporta nativamente o includes()
.
Caso queira o polyfill deste método para compatibilidade em todos os browsers: Array.prototype.includes.
Verificando se String contém palavra
Se você precisa verificar se uma palavra está contida em uma string, mas não pegar fragmentos da string que não seja uma palavra inteira, exemplo: "pessoa" está contida na frase "Olá pessoal", você pode ainda usar o método includes()
, mas desta vez, no objeto Array
.
'Olá pessoal'.split(/\W+/).includes('pessoa'); // false
'Olá pessoal'.split(/\W+/).includes('pessoal'); // true
O exemplo acima primeiro divide a string em um array de palavras através de split()
, e verifica se a palavra em específico está contida na string.
Utilizando o método indexOf()
Antes do método oficial includes()
, uma outra forma de verificar se uma string contém uma substring era usando o método indexOf()
. Esse método retorna um inteiro com a posição da substring, e caso não encontre a substring, ele retorna -1
. Você pode também passar um segundo parâmetro opcional para indicar onde começar buscando. Veja o exemplo abaixo:
'abcde'.indexOf('a') !== -1 // true
'abcde'.indexOf('f') !== -1 // false
'abcde'.indexOf('a', 1) !== -1 // false
'abcde'.indexOf('a'); // 0
'abcde'.indexOf('b'); // 1