W3docs

Limite de Palavra em Regex JavaScript (\b)

Em expressões regulares JavaScript, a âncora \b corresponde a limites de palavra entre caracteres \w e não-\w, permitindo correspondências precisas de palavras inteiras.

Introdução aos Limites de Palavra

Em JavaScript em expressões regulares, a âncora \b é usada para corresponder limites de palavra. Um limite de palavra é uma posição entre um caractere de palavra (definido pela classe de caracteres \w, que inclui [a-zA-Z0-9_]) e um caractere que não é de palavra (qualquer coisa que não seja um caractere de palavra). Isso permite a correspondência precisa de palavras inteiras e pode ser particularmente útil para tarefas como pesquisar, substituir ou validar padrões específicos de palavras em texto.

\b é uma das âncoras de regex. Ao contrário das âncoras de início e fim de string ^ e $, que fixam uma correspondência nas bordas da entrada, \b a fixa nas bordas de uma palavra — portanto, um único padrão pode corresponder palavras inteiras em qualquer lugar de uma string.

Este capítulo aborda o que conta como um limite de palavra, como funciona a âncora oposta \B, a natureza de largura zero de ambas, padrões comuns de correspondência de palavras inteiras e as limitações encontradas com texto Unicode.

Usando a Âncora \b

A âncora \b é uma asserção de largura zero: ela corresponde a uma posição, não a um caractere. A posição deve estar entre um caractere de palavra (um que \w corresponde: [a-zA-Z0-9_]) e um caractere que não é de palavra — ou entre um caractere de palavra e o início ou fim absoluto da string. Por ser de largura zero, \b não consome nada; apenas restringe onde o restante do padrão pode corresponder.

Há três lugares onde ocorre um limite de palavra:

  • Antes do primeiro caractere, se esse caractere for um caractere de palavra.
  • Após o último caractere, se esse caractere for um caractere de palavra.
  • Entre dois caracteres adjacentes onde exatamente um deles é um caractere de palavra.

A âncora complementar \B corresponde a toda posição que não é um limite de palavra.

Para ver onde os limites realmente ocorrem, insira um marcador em cada posição \b:

javascript— editable

Explicação: Os quatro limites são: antes de a, após c (ao lado do espaço), antes de d, e após f (fim da string). A lacuna entre espaços não tem limite porque nenhum dos lados é um caractere de palavra.

Exemplo: Correspondendo Palavras Inteiras

javascript— editable

Explicação:

  • A regex /\bcat\b/ corresponde à palavra "cat" como uma palavra inteira.
  • Na string 'The cat is here.', "cat" é uma palavra separada, então a correspondência é true.
  • Na string 'The caterpillar is here.', "cat" faz parte da palavra "caterpillar", então a correspondência é false.

Exemplo: Encontrando Palavras Inteiras no Texto

javascript— editable

Explicação:

  • A regex /\bcat\b/g encontra todas as ocorrências de "cat" como uma palavra inteira no texto.
  • Ela corresponde apenas "cat", e não "scatter" ou "caterpillar" ou "catfish", pois "cat" não é uma palavra separada nesses contextos.
  • O resultado é um array contendo ["cat"].

Limites de Não-Palavra (\B)

\B é o exato oposto de \b: corresponde a qualquer posição que não seja um limite de palavra. Isso significa que tem sucesso no meio de uma palavra (entre dois caracteres de palavra) ou entre dois caracteres que não são de palavra, e falha onde \b teria sucesso.

Use \B quando quiser corresponder um padrão apenas quando ele está embutido dentro de uma palavra maior.

javascript— editable

Explicação:

  • /\Boo\B/g requer um não-limite em ambos os lados de oo.
  • Em 'noon', o oo tem n em ambos os lados, então ambas as asserções \B se mantêm — há correspondência.
  • Em 'zoo', o oo está no fim da palavra, então um limite de palavra real está lá e \B falha. Apenas o oo de 'noon' é retornado.

Uma maneira prática de lembrar a relação: em toda posição, exatamente um entre \b e \B corresponde.

Aplicações Práticas

Validando Campos de Entrada

Limites de palavra podem ser úteis para validar campos de entrada onde correspondências exatas de palavras são necessárias.

javascript— editable

Explicação:

  • A regex /^\w+$/ garante que a entrada seja uma única palavra sem espaços.
  • ^ afirma o início da string e $ afirma o fim. Como \w só corresponde caracteres de palavra, ^ e $ impõem implicitamente limites de palavra, tornando \b redundante aqui.
  • \w+ corresponde a um ou mais caracteres de palavra (incluindo letras, dígitos e sublinhados).
  • 'user123' corresponde porque é uma única palavra sem espaços.
  • 'user 123' não corresponde porque contém um espaço, que interrompe a sequência de caracteres de palavra.
  • Note que \w inclui sublinhados, o que pode afetar a lógica de validação se você pretende excluí-los.

Extraindo Palavras de uma Frase

Você pode extrair palavras específicas de uma frase usando limites de palavra.

javascript— editable

Explicação:

  • O padrão regex /\btest\w*\b/gi corresponde a qualquer palavra que comece com "test".
  • O sinalizador g garante que todas as correspondências na string sejam retornadas.
  • O sinalizador i garante que a correspondência não diferencie maiúsculas de minúsculas, portanto corresponde tanto a "test" quanto a "Testing".
  • O resultado é ["test", "Testing"], pois ambas as palavras começam com "test" e são seguidas por zero ou mais caracteres de palavra.

Combinando Limites de Palavra com Outros Padrões

Os limites de palavra podem ser combinados com outros padrões de regex para correspondências mais complexas.

Exemplo: Encontrando Palavras com Prefixo

javascript— editable

Explicação:

  • A regex /\bpre\w*\b/g corresponde a palavras que começam com o prefixo "pre".
  • \bpre afirma um limite de palavra seguido de "pre".
  • \w* corresponde a zero ou mais caracteres de palavra.
  • \b afirma um limite de palavra no final.
  • O resultado é um array contendo ["preheat", "prefix", "prepare", "pressure"].

Exemplo: Encontrando Palavras com Sufixo Específico

javascript— editable

Explicação:

  • A regex /\w+ing\b/g corresponde a palavras que terminam com "ing".
  • \w+ corresponde a um ou mais caracteres de palavra.
  • ing\b corresponde a "ing" seguido de um limite de palavra.
  • O resultado é um array contendo ["running", "walking", "talking", "thinking"].
Informação

Quando precisar corresponder palavras inteiras ou garantir que palavras não façam parte de strings maiores, use a âncora \b para definir precisamente os limites de palavra

Use \b para Correspondência Precisa de Palavras

javascript— editable

Explicação:

  • A regex /\bdog\b/g corresponde à palavra "dog" como uma palavra inteira.
  • Ela não corresponde "dogs" porque "dog" não é uma palavra separada nesse contexto.
  • O resultado é um array contendo ["dog"].

Exemplo: Correspondendo Números Inteiros

Como os dígitos são caracteres de palavra, \b também funciona com números — útil para extrair inteiros de texto misto sem dividir em um ponto decimal.

javascript— editable

Explicação:

  • /\b\d+\b/g corresponde sequências de dígitos que estão sozinhas entre caracteres que não são dígitos.
  • 3.14 é dividido em "3" e "14" porque o . é um caractere que não é de palavra, portanto um limite de palavra fica em cada lado dele.

Limitações com Unicode

A âncora \b é definida puramente em termos do conjunto ASCII \w ([a-zA-Z0-9_]). Letras com diacríticos ou caracteres de scripts não latinos são tratados como caracteres que não são de palavra, portanto um limite aparece em lugares que você pode não esperar.

javascript— editable

Explicação:

  • é não está em \w, portanto o mecanismo vê um limite de palavra entre caf e é.
  • O \b final após é espera que é seja um caractere de palavra — não é — portanto toda a asserção falha mesmo que o texto claramente contenha a palavra "café".

JavaScript não fornece uma versão com reconhecimento de Unicode de \b (os sinalizadores u e v não alteram sua definição). Se precisar corresponder palavras acentuadas ou não latinas como palavras inteiras, construa seus próprios limites a partir de uma classe de caracteres explícita, por exemplo:

javascript— editable

Explicação:

  • \p{L} (habilitado pelo sinalizador u) corresponde a qualquer letra Unicode.
  • O lookbehind (?<![\p{L}]) e o lookahead (?![\p{L}]) recriam um limite sensível a letras, portanto café corresponde, mas cafés não.
  • Esta é a solução padrão quando o \b ASCII é muito restrito para o seu alfabeto.

Conclusão

A âncora \b nas expressões regulares JavaScript é uma ferramenta poderosa para corresponder limites de palavra. Ao usar essa âncora, você pode criar padrões precisos e eficazes para encontrar, substituir e validar palavras em texto. Seja trabalhando com funcionalidade de pesquisa, validação de dados ou processamento de texto, entender e utilizar limites de palavra pode aprimorar significativamente suas capacidades de regex.

Prática

Prática
Qual é o uso do limite de palavra '\b' em JavaScript?
Qual é o uso do limite de palavra '\b' em JavaScript?
Was this page helpful?