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:
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
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
Explicação:
- A regex
/\bcat\b/gencontra 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.
Explicação:
/\Boo\B/grequer um não-limite em ambos os lados deoo.- Em
'noon', oootemnem ambos os lados, então ambas as asserções\Bse mantêm — há correspondência. - Em
'zoo', oooestá no fim da palavra, então um limite de palavra real está lá e\Bfalha. Apenas ooode'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.
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\wsó corresponde caracteres de palavra,^e$impõem implicitamente limites de palavra, tornando\bredundante 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
\winclui 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.
Explicação:
- O padrão regex
/\btest\w*\b/gicorresponde a qualquer palavra que comece com "test". - O sinalizador
ggarante que todas as correspondências na string sejam retornadas. - O sinalizador
igarante 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
Explicação:
- A regex
/\bpre\w*\b/gcorresponde a palavras que começam com o prefixo "pre". \bpreafirma um limite de palavra seguido de "pre".\w*corresponde a zero ou mais caracteres de palavra.\bafirma um limite de palavra no final.- O resultado é um array contendo
["preheat", "prefix", "prepare", "pressure"].
Exemplo: Encontrando Palavras com Sufixo Específico
Explicação:
- A regex
/\w+ing\b/gcorresponde a palavras que terminam com "ing". \w+corresponde a um ou mais caracteres de palavra.ing\bcorresponde a "ing" seguido de um limite de palavra.- O resultado é um array contendo
["running", "walking", "talking", "thinking"].
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
Explicação:
- A regex
/\bdog\b/gcorresponde à 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.
Explicação:
/\b\d+\b/gcorresponde 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.
Explicação:
énão está em\w, portanto o mecanismo vê um limite de palavra entrecafeé.- O
\bfinal 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:
Explicação:
\p{L}(habilitado pelo sinalizadoru) corresponde a qualquer letra Unicode.- O lookbehind
(?<![\p{L}])e o lookahead(?![\p{L}])recriam um limite sensível a letras, portantocafécorresponde, mascafésnão. - Esta é a solução padrão quando o
\bASCII é 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.