Objeto RegExp: Expressões Regulares - JavaScript
Expressões regulares representam um padrão usado para buscar ou modificar uma string. Para trabalhar com strings, podemos, claro, usar um conjunto padrão de métodos do tipo String. No entanto, as expressões regulares oferecem uma ferramenta mais flexível.
Para trabalhar com expressões regulares em JavaScript, o objeto RegExp
Você pode definir uma expressão regular de duas maneiras:
const myExp1 = /hello/;
const myExp2 = new RegExp("hello");
A expressão regular usada aqui é bastante simples: consiste na palavra "hello". No primeiro caso, a expressão é colocada entre duas barras (notação literal), enquanto no segundo caso, usa-se o construtor RegExp
Geralmente, se a expressão regular é definida dinamicamente (por exemplo, através da entrada do usuário), então o construtor é usado. Se a expressão é estática e imutável, usa-se a notação literal, como no primeiro caso.
Após definir uma expressão regular para processar strings, podemos usar um dos métodos RegExp
: verifica se um padrão específico está presente na string. Se a string corresponder ao padrão, esse método retorna verdadeiro, caso contrário, retorna falso.test()
: procura ocorrências de um padrão específico na string e retorna essas ocorrências como um array.exec()
Além disso, para trabalhar com expressões regulares, podemos usar uma série de métodos do tipo String:
: também procura ocorrências de um padrão específico na string e retorna essas ocorrências como um array.match()
: substitui ocorrências de um padrão específico na string.replace()
: procura ocorrências de um padrão específico na string e retorna o índice da primeira ocorrência.search()
: divide a string de acordo com um padrão específico e retorna as partes obtidas como um array.split()
Verificação de Correspondência da String com o Padrão
test()
Para verificar se um texto na string corresponde a uma expressão regular, o método test()
RegExp
const initialText = "hello world!"; // string para busca
const exp = /hello/; // expressão regular
const result = exp.test(initialText); // verifica a presença da expressão exp na string
console.log(result); // true
const initialText2 = "Hi all";
const result2 = exp.test(initialText2);
console.log(result2); // false - não há "hello" na string "Hi all"
Neste caso, verificamos se nas strings initialText
initialText2
exp
/hello/
exp.test(initialText)
exec()
O método exec()
null
const initialText = "hello world!"; // string para busca
const exp = /hello/; // expressão regular
const result = exp.exec(initialText); // verifica a presença da expressão exp na string
console.log(result); // ['hello', index: 0, input: 'hello world!', groups: undefined]
const initialText2 = "Hi all";
const result2 = exp.exec(initialText2);
console.log(result2); // null - não há "hello" na string "Hi all"
Assim, na string "hello world!" há texto que corresponde ao padrão /hello/
['hello', index: 0, input: 'hello world!', groups: undefined]
O primeiro elemento do array é o texto que corresponde à expressão (no nosso caso "hello"). O segundo elemento é o índice desse texto na string (no nosso caso, índice 0 - início da string). O terceiro elemento representa a string de entrada. O quarto elemento representa um grupo, que no exemplo acima é indefinido (grupos serão discutidos mais adiante).
Grupos de Caracteres
No exemplo anterior, utilizamos a string "hello" como uma expressão regular. Na realidade, para verificar a presença dessa substring numa string, poderíamos usar os métodos padrão do tipo String. No entanto, não se trata apenas de uma string, mas de um padrão que também pode incluir elementos especiais da sintaxe das expressões regulares. Vamos considerar os padrões mais básicos:
(ponto) corresponde a qualquer caractere..
(caractere único) corresponde ao caractere "a".a
(união de caracteres) corresponde à sequência de caracteres "ab".ab
corresponde a "a" ou "b", e o caracterea|b
pode ser visto como um análogo da operação OR.|
Por exemplo, para verificar se a senha tem pelo menos 8 caracteres:
const exp = /......../; // expressão regular - 8 caracteres
const password1 = "1234567890";
const password2 = "qwery5";
// verificando a primeira senha
console.log(exp.test(password1)); // true - password1 corresponde à expressão exp
// verificando a segunda senha
console.log(exp.test(password2)); // false - password2 não corresponde à expressão exp
Aqui, a expressão regular /......../
Outro exemplo:
const exp = /word|work/; // corresponde a "word" ou "work"
const str1 = "hello world";
const str2 = "hello work";
const str3 = "hello word";
console.log(exp.test(str1)); // false
console.log(exp.test(str2)); // true
console.log(exp.test(str3)); // true
Neste caso, a expressão /word|work/
/(wor)d|k/
const exp = /(wor)d|k/; // corresponde a "word" ou "work"
const str1 = "hello world";
const str2 = "hello work";
const str3 = "hello word";
console.log(exp.test(str1)); // false
console.log(exp.test(str2)); // true
console.log(exp.test(str3)); // true
Outro exemplo - verificar se um endereço de e-mail pertence a "gmail.com" ou "yahoo.com":
const exp = /@yahoo|@gmail(.com)/; // corresponde a "@yahoo.com" ou "@gmail.com"
const email1 = "tom@outlook.com";
const email2 = "tom@gmail.com";
const email3 = "tom@yandex.ru";
const email4 = "tom@yahoo.com";
console.log(exp.test(email1)); // false
console.log(exp.test(email2)); // true
console.log(exp.test(email3)); // false
console.log(exp.test(email4)); // true