W3docs

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.

ClasseCorresponde aEquivalente
\dum dígito[0-9]
\wum caractere de palavra: letra, dígito ou sublinhado[A-Za-z0-9_]
\sum caractere de espaço em branco: espaço, tabulação \t, nova linha \n, etc.
javascript— editable

Um único atalho corresponde a um caractere. Adicione um quantificador para corresponder a uma sequência deles — \d+ significa "um ou mais dígitos":

javascript— editable

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.

ClasseCorresponde a
\Dqualquer caractere que não seja um dígito
\Wqualquer caractere que não seja um caractere de palavra
\Squalquer caractere que não seja espaço em branco
javascript— editable

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.

javascript— editable

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).

javascript— editable

Quando você quiser que o ponto também corresponda a quebras de linha, adicione a flag s (abreviação de "dotAll"):

javascript— editable

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.

javascript— editable

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.)

javascript— editable

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.

javascript— editable

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.

javascript— editable

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: [\]], [\\].
javascript— editable
Aviso

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 \s correspondem a dígitos, caracteres de palavra e espaços em branco; \D \W \S correspondem aos seus opostos.
  • O ponto . corresponde a qualquer caractere exceto uma quebra de linha — a menos que você adicione a flag s (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.

Prática

Prática
Quais das alternativas a seguir são classes de caracteres válidas em JavaScript?
Quais das alternativas a seguir são classes de caracteres válidas em JavaScript?
Was this page helpful?