Expressões regulares (regex) são uma das ferramentas mais poderosas — e temidas — do arsenal de um desenvolvedor. Elas permitem buscar, validar e manipular texto com padrões complexos em uma única linha de código.
Neste guia prático, vamos desmistificar regex com exemplos reais que você pode usar no dia a dia.
O Que São Expressões Regulares?
Uma regex é um padrão de busca que descreve um conjunto de strings. Em vez de buscar texto exato, você descreve o "formato" do que procura.
// Busca exata — encontra só "gato"
'O gato preto'.includes('gato'); // true
// Regex — encontra "gato", "gata", "gatos"
/gat[oa]s?/.test('O gato preto'); // true
/gat[oa]s?/.test('A gata preta'); // true
Sintaxe Essencial
| Símbolo | Significado | Exemplo | Match |
|---|---|---|---|
. | Qualquer caractere | c.t | cat, cot, c9t |
\d | Dígito (0-9) | \d{3} | 123, 456 |
\w | Letra, número ou _ | \w+ | hello, user_1 |
\s | Espaço em branco | \s+ | espaço, tab |
* | Zero ou mais | ab*c | ac, abc, abbc |
+ | Um ou mais | ab+c | abc, abbc |
? | Zero ou um | colou?r | color, colour |
{n} | Exatamente n vezes | \d{4} | 2024 |
{n,m} | Entre n e m vezes | \d{2,4} | 12, 123, 1234 |
[abc] | Um dos caracteres | [aeiou] | a, e, i, o, u |
[^abc] | Nenhum dos caracteres | [^0-9] | qualquer não-dígito |
^ | Início da string | ^Olá | Olá mundo |
$ | Fim da string | fim$ | este é o fim |
| | OU | gato|cachorro | gato, cachorro |
() | Grupo de captura | (\d{2})/(\d{2}) | 25/12 → 25, 12 |
10 Regex que Todo Dev Precisa
1. Validar Email
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
emailRegex.test('user@email.com'); // true
emailRegex.test('invalid@'); // false
emailRegex.test('user@email.com.br'); // true
2. Validar CPF (formato)
const cpfRegex = /^\d{3}\.\d{3}\.\d{3}-\d{2}$/;
cpfRegex.test('123.456.789-00'); // true
cpfRegex.test('12345678900'); // false (sem máscara)
// Para aceitar com ou sem máscara:
const cpfFlexivel = /^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$/;
3. Validar CNPJ (formato)
const cnpjRegex = /^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/;
cnpjRegex.test('12.345.678/0001-00'); // true
4. Validar Telefone Brasileiro
const phoneRegex = /^\(?\d{2}\)?\s?9?\d{4}-?\d{4}$/;
phoneRegex.test('(11) 98765-4321'); // true
phoneRegex.test('11987654321'); // true
phoneRegex.test('(21) 3456-7890'); // true
5. Validar URL
const urlRegex = /^https?:\/\/[\w.-]+(?:\.[\w.-]+)+[\/\w.-]*\/?$/;
urlRegex.test('https://devthru.com'); // true
urlRegex.test('http://sub.domain.com/path'); // true
urlRegex.test('ftp://invalid'); // false
6. Extrair Hashtags
const hashtagRegex = /#[\w\u00C0-\u00FF]+/g;
'Post sobre #JavaScript e #Python'.match(hashtagRegex);
// ['#JavaScript', '#Python']
7. Validar Senha Forte
// Mínimo 8 caracteres, 1 maiúscula, 1 minúscula, 1 número, 1 especial
const senhaRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$/;
senhaRegex.test('Abc@1234'); // true
senhaRegex.test('abc12345'); // false (sem maiúscula e especial)
8. Validar CEP
const cepRegex = /^\d{5}-?\d{3}$/;
cepRegex.test('01234-567'); // true
cepRegex.test('01234567'); // true
9. Remover Tags HTML
const htmlRegex = /<[^>]*>/g;
'<p>Texto <strong>bold</strong></p>'.replace(htmlRegex, '');
// 'Texto bold'
10. Validar Data (DD/MM/AAAA)
const dataRegex = /^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/\d{4}$/;
dataRegex.test('25/12/2024'); // true
dataRegex.test('32/13/2024'); // false
Regex em Python
O módulo re do Python funciona de forma similar:
import re
# Validar email
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
print(re.match(email_pattern, 'user@email.com')) # Match object
# Extrair todos os números de um texto
numeros = re.findall(r'\d+', 'Pedido 123 com 5 itens por R$ 99')
print(numeros) # ['123', '5', '99']
# Substituir padrões
texto = re.sub(r'\b\d{3}\.\d{3}\.\d{3}-\d{2}\b', '[CPF OCULTO]',
'O CPF 123.456.789-00 foi encontrado')
print(texto) # 'O CPF [CPF OCULTO] foi encontrado'
Dicas de Performance
- Compile regex que serão reutilizadas: Em Python, use
re.compile(). Em JS, use var em vez de criar inline em loops. - Evite backtracking: Padrões como
(a+)+podem causar ReDoS (regex denial of service). Use quantificadores possessivos ou atomic groups quando possível. - Use ferramentas visuais: Teste suas regex interativamente antes de implementar no código.
Perguntas Frequentes
Regex serve para validar formulários?
Sim, mas combine com validação server-side. Regex no front-end melhora a UX, mas nunca deve ser a única linha de defesa.
Existe diferença entre regex em JavaScript e Python?
A sintaxe base é a mesma, mas existem diferenças em flags. JS usa /padrão/gi, Python usa re.IGNORECASE. Lookaheads e lookbehinds também variam.
Como debugar regex complexas?
Use ferramentas visuais como o Testador de Regex do DevThru que mostra matches em tempo real com explicações.
🛠️ Experimente na prática
Use nossas ferramentas online gratuitas — sem cadastro, direto no navegador.
