Esse artigo sobre expressões regulares tem como objetivo responder e esclarecer algumas dúvidas e desmistificar de uma vez por todas o regex.
- Por que aprender regex?
- o que são expressões regulares?
- Como escrever uma expressão regular?
- Conclusão do artigo
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 m repetiçõ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,
\$a
match 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"]