Classes de Caracteres em Regex no JavaScript
Aprenda as classes de caracteres em regex do JavaScript: atalhos \d \w \s, negações \D \W \S, o ponto, a flag s (dotAll) e classes personalizadas [...].
Classes de Caracteres em JavaScript
Uma classe de caracteres é uma parte de uma expressão regular que corresponde a um único caractere pertencente a um conjunto específico — por exemplo, "qualquer dígito" ou "qualquer caractere de espaço em branco". Em vez de listar todos os caracteres possíveis, você descreve o tipo de caractere desejado e o motor de regex faz a correspondência.
Esta página aborda as classes de atalho integradas (\d, \w, \s), suas negações (\D, \W, \S), o ponto especial . e a flag s (dotAll), além de como criar suas próprias classes com colchetes [...], incluindo intervalos e escape.
Cada classe corresponde exatamente a um caractere. Para corresponder a vários, combine uma classe com um quantificador como + ou {2,4}.
As classes de atalho: \d \w \s
O JavaScript fornece três classes de atalho para os grupos de caracteres mais comuns.
| Classe | Corresponde a | Equivalente |
|---|---|---|
\d | um dígito | [0-9] |
\w | um caractere de palavra: letra, dígito ou sublinhado | [A-Za-z0-9_] |
\s | um caractere de espaço em branco: espaço, tabulação \t, nova linha \n, etc. | — |
Um único atalho corresponde a um caractere. Adicione um quantificador para corresponder a uma sequência deles — \d+ significa "um ou mais dígitos":
As classes negadas: \D \W \S
Cada atalho tem um parceiro em maiúscula que corresponde ao conjunto oposto — qualquer caractere que não pertença à classe original.
| Classe | Corresponde a |
|---|---|
\D | qualquer caractere que não seja um dígito |
\W | qualquer caractere que não seja um caractere de palavra |
\S | qualquer caractere que não seja espaço em branco |
Um truque útil: \D (ou [^\d]) permite remover tudo exceto os dígitos, o que é comum ao limpar entradas do usuário como números de telefone.
O ponto . e a flag s (dotAll)
O ponto . é uma classe de caracteres especial que corresponde a qualquer caractere único, exceto uma quebra de linha (\n, \r e alguns separadores de linha Unicode).
Quando você quiser que o ponto também corresponda a quebras de linha, adicione a flag s (abreviação de "dotAll"):
Veja padrões e flags para a lista completa de flags de regex, como g, i e s.
Classes de caracteres personalizadas: [...]
Quando os atalhos não são suficientes, crie sua própria classe listando caracteres dentro de colchetes. [abc] corresponde a um único a, b ou c.
Intervalos
Um hífen - entre dois caracteres cria um intervalo: [a-z] corresponde a qualquer letra minúscula, [0-9] a qualquer dígito. Você pode combinar vários intervalos e caracteres literais em uma única classe. (Para mais detalhes, veja conjuntos e intervalos.)
Classes personalizadas negadas [^...]
Um circunflexo ^ como primeiro caractere dentro dos colchetes nega a classe: [^a-z] corresponde a qualquer caractere que não seja uma letra minúscula.
Combinando atalhos e caracteres
As classes de atalho também funcionam dentro de classes personalizadas. [\w.] corresponde a um caractere de palavra ou a um ponto literal — útil para tokens como strings de versão ou nomes de arquivo.
Escape dentro de classes de caracteres
Dentro de [...], a maioria dos metacaracteres de regex perde seu significado especial, portanto geralmente não é necessário fazer escape deles. Por exemplo, [.] corresponde a um ponto literal — não há necessidade de [\.].
Alguns caracteres ainda requerem atenção:
- Hífen
-— representa um intervalo entre dois caracteres. Para corresponder a um hífen literal, coloque-o no início, no final ou faça seu escape:[-+],[+-]ou[+\-]. - Circunflexo
^— nega a classe somente quando é o primeiro caractere. Em qualquer outra posição ([a^]), é um^literal. - Colchete de fechamento
]e barra invertida\— sempre faça o escape destes:[\]],[\\].
Um hífen mal posicionado pode criar silenciosamente um intervalo não intencional. [a-z] é um intervalo, mas [z-a] gera um erro de sintaxe, e [%-/] corresponde a qualquer caractere cujo ponto de código esteja entre % e /. Em caso de dúvida, faça o escape do hífen ou mova-o para a extremidade da classe.
Unicode e a flag u
Por padrão, \w, \d e \s reconhecem apenas ASCII. Com a flag u você ativa a correspondência com reconhecimento de Unicode e escapes de propriedade como \p{Letter}, que correspondem a caracteres de qualquer idioma. Veja a flag unicode u e a classe \p para mais detalhes.
Conclusão
As classes de caracteres permitem descrever que tipo de caractere corresponder em vez de listar todas as opções:
\d \w \scorrespondem a dígitos, caracteres de palavra e espaços em branco;\D \W \Scorrespondem aos seus opostos.- O ponto
.corresponde a qualquer caractere exceto uma quebra de linha — a menos que você adicione a flags(dotAll). - Os colchetes
[...]constroem conjuntos personalizados; adicione intervalos com-, negue com um^inicial e lembre-se de que a maioria dos metacaracteres é literal dentro de uma classe.
Combine essas classes com quantificadores para corresponder a caracteres repetidos e criar padrões poderosos e legíveis.