Esse artigo sobre expressões regulares tem como objetivo responder e esclarecer algumas dúvidas e desmistificar de uma vez por todas o regex.

Motivos para você aprender Regex

Muitos programadores nem tentam entender as expressões regulares simplesmente por parecerem coisas de outro muito. De fato, quando escrevemos uma consulta com diversos detalhe realmente fica parecendo uma escrita alienigena. Mas o objetivo deste artigo e desmistificar de uma vez por todas as regex.

Regex são importante para diversas coisas. São com elas que validamos os campos de e-mail e senha na maioria dos formulários de login. Podemos utiliza-las para converter formatação de data e moeda. Também podemos ganhar muito tempo utilizando as regex de forma inteligente evitando trabalhos longos e morosos.

O que são expressões regulares (regex)?

Uma expressão regular, também conhecida como “regex” ou “regexp”, é uma sequência de caracteres que define um padrão de correspondência de texto. É uma ferramenta poderosa para buscar, extrair e manipular texto com base em padrões específicos.

As expressões regulares são frequentemente usadas em programação para validar entradas de usuário, pesquisar e filtrar dados em grandes conjuntos de dados e manipular strings de texto. Elas são suportadas em várias linguagens de programação, como Python, Java, JavaScript, PHP e muitas outras.

As expressões regulares podem ser usadas para corresponder a caracteres específicos, como letras ou dígitos, bem como para padrões mais complexos, como correspondência a um padrão de e-mail válido ou um número de telefone válido. Elas também podem ser usadas para pesquisar e substituir texto, extrair informações de dados estruturados e validar formatos de arquivos.

Como escrever uma expressão regular?

Para escrever uma expressão regular é necessário antes entender sua sintaxe e seus caracteres especiais.

Caracter descrição exemplo
[ ] Os colchetes especificam um conjunto de caracteres que você deseja corresponder. [a-z] [0-9] [abx]
. Um ponto corresponde a qualquer caractere único (exceto nova linha '\n').
^ O símbolo de circunflexo ^é usado para verificar se uma string começa com um determinado caractere. ^a, ^ab
$ O símbolo do cifrão $é usado para verificar se uma string termina com um determinado caractere. a$,m$
* O símbolo de estrela *corresponde a zero ou mais ocorrências do padrão deixado para ele. ma*n
+ O símbolo de mais +corresponde a uma ou mais ocorrências do padrão deixado para ele. ma+n
? O símbolo de ponto de interrogação ?corresponde a zero ou uma ocorrência do padrão deixado para ele. ma?n
{ } Considere este código: {n,m}. Isso significa pelo menos n, e no máximo mrepetições do padrão deixado para ele. a{2,3}
` ` Barra vertical `
( ) Os parênteses ()são usados ​​para agrupar subpadrões. Por exemplo, `(a b

\ – Barra invertida
A barra invertida \é usada para escapar de vários caracteres, incluindo todos os metacaracteres. Por exemplo,

\$amatch se uma string contiver $seguido por a. Aqui, $não é interpretado por um mecanismo RegEx de maneira especial.

Se você não tiver certeza se um caractere tem um significado especial ou não, pode colocá-lo \antes dele. Isso garante que o personagem não seja tratado de maneira especial.


Sequências Especiais

As sequências especiais tornam os padrões comumente usados ​​mais fáceis de escrever. Aqui está uma lista de sequências especiais:

\A– Corresponde se os caracteres especificados estiverem no início de uma string.

Expressão String Coincide?
\Athe the sun Corresponder
\Athe In the sun sem correspondência

\b– Corresponde se os caracteres especificados estiverem no início ou no final de uma palavra.

Expressão String Coincide?
\bfoo football Corresponder
foo\b the foo Corresponder
\bfoo football Corresponder
foo\b a football sem correspondência

\B– Oposto de \b. Corresponde se os caracteres especificados não estiverem no início ou no final de uma palavra.

Expressão String Coincide?
\Bfoo football sem correspondência
foo\B a football Corresponder

\d– Corresponde a qualquer dígito decimal. Equivalente a[0-9]

Expressão String Coincide?
\d 12abc3 3 jogos (em )1ab34"50
\d JavaScript sem correspondência

\D– Corresponde a qualquer dígito não decimal. Equivalente a[^0-9]

Expressão String Coincide?
\D 1ab34"50 3 jogos (em )1ab34"50
\D 1345 sem correspondência

\s– Corresponde onde uma string contém qualquer caractere de espaço em branco. Equivalente a [ \t\n\r\f\v].

Expressão String Coincide?
\s JavaScript RegEx 1 jogo
\s JavaScriptRegEx sem correspondência

\S– Corresponde onde uma string contém qualquer caractere que não seja um espaço em branco. Equivalente a [^ \t\n\r\f\v].

Expressão String Coincide?
\S a b 2 jogos (em a b)
\S sem correspondência

\w– Corresponde a qualquer caractere alfanumérico (dígitos e letras). Equivalente a [a-zA-Z0-9_]. A propósito, o sublinhado _também é considerado um caractere alfanumérico.

Expressão String Coincide?
\w 12&": ;c 3 jogos (em )12&": ;c
\w %"> ! sem correspondência

\W– Corresponde a qualquer caractere não alfanumérico. Equivalente a[^a-zA-Z0-9_]

Expressão String Coincide?
\W 1a2%c 1 partida (às )1a2%c
\W JavaScript sem correspondência

\Z– Corresponde se os caracteres especificados estiverem no final de uma string.

Expressão String Coincide?
JavaScript\Z I like JavaScript 1 jogo
JavaScript\Z I like JavaScript Programming sem correspondência
JavaScript\Z JavaScript is fun sem correspondência

Sinalizadores de Expressão Regular

Os sinalizadores são usados ​​com expressões regulares que permitem várias opções, como pesquisa global, pesquisa sem distinção entre maiúsculas e minúsculas, etc. Eles podem ser usados ​​separadamente ou em conjunto.

Bandeiras Descrição
g Executa uma correspondência global (encontrar todas as correspondências)
m Executa correspondência multilinha
i Executa correspondência sem distinção entre maiúsculas e minúsculas
const string = 'Find me';
const pattern = /me/;

// search if the pattern is in string variable
const result1 = string.search(pattern);
console.log(result1); // 5

// replace the character with another character
const string1 = 'Find me';
string1.replace(pattern, 'found you'); // Find found you

// splitting strings into array elements
const regex1 = /[\s,]+/;
const result2 = 'Hello world! '.split(regex1);
console.log(result2); // ['Hello', 'world!', '']

// searching the phone number pattern
const regex2 = /(\d{3})\D(\d{3})-(\d{4})/g;
const result3 = regex2.exec('My phone number is: 555 123-4567.');
console.log(result3); // ["555 123-4567", "555", "123", "4567"]