Ir para o conteúdo
TextArray

Folha de referências Regex

As expressões regulares são compactas o suficiente para que a sintaxe seja mais fácil de procurar do que memorizar. Esta página contém tudo em uma tela - classes, quantificadores, âncoras, grupos, lookaround, escape e sinalizadores - com um exemplo prático para cada linha.

O tipo é JavaScript, que é executado no seu navegador e usado pelo testador de regex neste site. A maior parte é idêntica em Python, Java, Go e PCRE; onde os sabores divergem, eles divergem nas bordas - suporte lookbehind, sintaxe de grupo nomeado e se \d significa "dígito ASCII" ou "qualquer dígito Unicode".

Duas coisas explicam a maior parte das surpresas. Os quantificadores são gananciosos: eles pegam tudo que podem e devolvem somente quando o resto do padrão falha, e é por isso que <.+> engole duas tags e <.+?> não. E a alternância é a mais frouxa de todas, então ^a|b$ significa "começa com a ou termina com b" - não o que a maioria das pessoas pretende quando o escreve.

Classes de personagens

As abreviações são somente ASCII, a menos que você adicione o sinalizador u e use escapes de propriedade Unicode.

SintaxeSignificadoExemplo
.Qualquer caractere, exceto uma quebra de linhaAdicione o sinalizador s para que ele corresponda também às novas linhas./a.c/"abc" → "abc"
\dUm dígito, 0–9/\d+/"order 42" → "42"
\DQualquer coisa que não seja um dígito/\D+/"42abc" → "abc"
\wLetra, dígito ou sublinhadoApenas ASCII — "é" não é \w./\w+/"user_1!" → "user_1"
\WQualquer coisa \w não corresponde/\W+/"a++b" → "++"
\sQualquer espaço em branco, incluindo tabulações e novas linhas/\s+/"a \t b" → " \t "
\SQualquer caractere que não seja espaço em branco/\S+/" hi" → "hi"
[abc]Qualquer um dos personagens listados/[aeiou]/"rhythm and" → "a"
[^abc]Qualquer personagem, exceto os listados/[^aeiou ]+/"aeiou xyz" → "xyz"
[a-z]Uma variedade de personagens/[a-f]+/"zzabcz" → "abc"
\p{L}Qualquer letra Unicode (precisa da bandeira u)/\p{L}+/"42 café" → "café"

Quantificadores

Todos estes são gananciosos por padrão: eles pegam o máximo que podem e devolvem apenas se o resto do padrão falhar.

SintaxeSignificadoExemplo
*Zero ou mais/ab*/"a" → "a"
+Um ou mais/ab+/"abbb" → "abbb"
?Zero ou um – torna opcional/colou?r/"color" → "color"
{3}Exatamente três/\d{3}/"id 12345" → "123"
{2,}Dois ou mais/a{2,}/"aaa" → "aaa"
{2,4}Entre dois e quatro/a{2,4}/"aaaaa" → "aaaa"
*?Preguiçoso – leva o mínimo possívelO ganancioso <.+> engoliria ambas as tags./<.+?>/"<a><b>" → "<a>"

Âncoras e limites

Eles correspondem a uma posição, não a um personagem, portanto não consomem nada.

SintaxeSignificadoExemplo
^Início da string ou de uma linha com a flag m/^a/"abc" → "a"
$Fim da string ou de uma linha com o sinalizador m/c$/"abc" → "c"
\bUm limite de palavraIsto é o que impede a correspondência de "cat" dentro de "concatenate"./\bcat\b/"the cat sat" → "cat"
\BNão é um limite de palavra/\Bcat/"concatenate" → "cat"

Grupos e alternância

SintaxeSignificadoExemplo
(abc)Grupo de captura — lembrado para substituição/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Agrupando sem capturarUse isto quando precisar apenas do agrupamento; mantém os números de captura significativos./(?:ab)+/"abab" → "abab"
(?<name>…)Grupo de captura nomeado/(?<year>\d{4})/"in 2026" → "2026"
a|bQualquer lado – alternânciaA alternância tem a precedência mais baixa: ^a|b$ é "^a" ou "b$", não "^(a|b)$"./cat|dog/"one dog" → "dog"
\1Referência retroativa ao primeiro grupo/(\w)\1/"letter" → "tt"

Olhe ao redor

Asserções sobre o que cerca uma posição. Eles próprios não combinam com nada, o que os torna seguros para serem combinados.

SintaxeSignificadoExemplo
(?=…)Lookahead - seguido por isto/\d+(?= kg)/"80 kg" → "80"
(?!…)Lookahead negativo - não seguido por isso/\d+(?! kg)/"80 lb" → "80"
(?<=…)Lookbehind – precedido por isto/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Lookbehind negativo - não precedido por isso/(?<!\$)\b\d+/"about 40" → "40"

Escapando

Esses doze caracteres são os que precisam de uma barra invertida para serem interpretados literalmente.

SintaxeSignificadoExemplo
\.Um ponto literal/\d\.\d/"v2.5" → "2.5"
\\Uma barra invertida literal/\\/"C:\\dir" → "\\"
\nUm feed de linha/a\nb/"a\nb" → "a\nb"
\tUma guia/a\tb/"a\tb" → "a\tb"
\uFFFFUm personagem por seu ponto de código/\u00e9/"café" → "é"

Bandeiras

BandeiraNomeSignificado
gGlobalEncontre todas as correspondências, não apenas a primeira.
iIgnorar casoCorresponder independentemente de maiúsculas ou minúsculas.
mMultilinhaFaz com que ^ e $ correspondam a cada quebra de linha, em vez de apenas no final da string.
sPonto tudoVamos. combinar quebras de linha também.
uUnicodeTrata o padrão como pontos de código e habilita escapes de propriedade \p{…}.
yPegajosoCorresponde exatamente ao lastIndex, nunca pesquisando para frente.

FAQ

Qual é a diferença entre quantificadores gananciosos e preguiçosos?
Quantificadores gananciosos (*, +, {2,}) correspondem tanto quanto possível e devolvem caracteres apenas quando o resto do padrão não pode corresponder. Adicionando ? torna-os preguiçosos: combinam o mínimo possível e só pegam mais quando são forçados. Em "<a><b>", o padrão <.+> retorna a string inteira e <.+?> retorna apenas <a>.
Por que minha palavra corresponde dentro de outras palavras?
Porque nada o ancorou. Coloque a palavra em \b — /\bcat\b/ corresponde a "cat" em "the cat sat", mas não dentro de "concatenate". \b corresponde a uma posição entre um caractere de palavra e um não-palavra, portanto, não consome nada.
O que a bandeira u muda?
Ele faz o padrão operar em pontos de código em vez de unidades UTF-16, de modo que um único emoji conta como um caractere e permite escapes de propriedade \p{…} como \p{L} para "qualquer letra". Sem ele, \w e \d permanecem somente ASCII, e é por isso que "café" não corresponde totalmente a /\w+/.
Quando devo usar um grupo sem captura?
Sempre que você precisar do agrupamento, mas não do texto capturado — (?:ab)+ em vez de (ab)+. As capturas custam um pouco de desempenho, mas o verdadeiro motivo é a numeração: cada grupo de captura que você adiciona altera os números dos seguintes, quebrando silenciosamente as substituições que usam $1 e $2.
O lookbehind é seguro de usar?
Nos navegadores atuais e no Node, sim - (?<=…) e (?<!…) têm suporte em todos os principais mecanismos desde 2018. O Safari foi o último a adicioná-lo. Se você estiver visando tempos de execução muito antigos, verifique primeiro; não há polyfill para sintaxe regex.