Flag m do Regex JavaScript (Multilinha)
A flag m em expressões regulares JavaScript faz com que ^ e $ correspondam ao início e fim de cada linha em uma string multilinha.
Introdução ao Modo Multilinha
A flag m em JavaScript expressões regulares permite que as âncoras ^ e $ correspondam ao início e ao fim de cada linha dentro de uma string multilinha, em vez de apenas ao início e ao fim de toda a string. Isso é especialmente útil ao trabalhar com texto multilinha onde você precisa realizar correspondência de padrões linha por linha.
Esta página aborda o que a flag m muda, como ela difere do comportamento padrão das âncoras, como ela se combina com as flags g e i, e padrões práticos para analisar texto orientado a linhas, como logs.
Comportamento Padrão vs. Modo Multilinha
Por padrão (sem m), ^ corresponde apenas ao início absoluto da string inteira e $ apenas ao fim absoluto. Uma quebra de linha (\n) dentro da string é apenas um caractere comum — ela não cria novas posições de âncora.
Com a flag m, ^ também corresponde à posição imediatamente após cada \n, e $ também corresponde à posição imediatamente antes de cada \n (bem como ao início/fim real da string). A correspondência em si nunca inclui o caractere de nova linha — as âncoras são posições de largura zero.
Sem m, apenas o abc no início absoluto da string é ancorado por ^. Ao adicionar m, ^ também corresponde após a quebra de linha, portanto ambas as linhas com abc são encontradas. (A flag g é o que coleta todas as correspondências em vez de parar na primeira.)
A Flag m: Ativando o Modo Multilinha
Quando você usa a flag m, as âncoras ^ e $ correspondem às posições antes e depois das quebras de linha dentro da string.
Usando a Flag m
Neste exemplo, o regex ^abc corresponde ao início de cada linha que começa com "abc" devido à flag m. A flag g garante que todas as ocorrências sejam encontradas. Sem a flag m, ela corresponderia apenas a "abc" no início absoluto da string.
Exemplo: Correspondendo Múltiplas Linhas
Aqui, o regex ^start corresponde ao início das linhas que começam com "start" devido à combinação das flags m e g.
Aplicações Práticas
Correspondendo Linhas em Texto Multilinha
A flag m é especialmente útil para corresponder padrões específicos no início ou no fim de cada linha em uma string multilinha.
Este exemplo mostra como ^hello com a flag m corresponde a "hello" no início de cada linha.
Correspondendo ao Fim de Linhas em Texto Multilinha
Da mesma forma, você pode usar a flag m para corresponder padrões ao fim de cada linha.
Aqui, world$ com a flag m corresponde a "world" ao fim de cada linha.
Exemplo: Extraindo Linhas Específicas
Este exemplo demonstra como extrair todas as linhas que começam com "Error:" de um arquivo de log usando a flag m.
Combinando Flags
Você pode combinar a flag m com outras flags para aprimorar suas expressões regulares. Por exemplo, combinar a flag m com a flag i (insensível a maiúsculas/minúsculas) permite realizar correspondências multilinha sem distinção de maiúsculas.
Exemplo: Correspondência Multilinha Sem Distinção de Maiúsculas
Neste exemplo, o regex corresponde a linhas que contêm "hello" independentemente de maiúsculas, devido à combinação das flags m e i.
- O padrão de regex
^.*hello.*$corresponde a qualquer linha que contenha "hello" sem distinção de maiúsculas. - A flag
mgarante que cada linha na string multilinha seja tratada individualmente. Hello world,hello worldeHELLO WORLDcorrespondem ao padrão porque contêm "hello" (sem distinção de maiúsculas) em algum lugar da linha.
Use a flag m no regex JavaScript para aplicar as âncoras ^ e $ a cada linha em uma string multilinha, aprimorando sua capacidade de validar e manipular conteúdo linha por linha.
Use a Flag m para Validação Linha por Linha
A flag m é ideal para cenários em que você precisa validar ou manipular cada linha individualmente dentro de uma string multilinha.
Exemplo: Validando um Número de Telefone dos EUA
Este regex garante que o número de telefone esteja no formato (123) 456-7890. Ele usa ^ para indicar o início e $ para indicar o fim, garantindo que a string inteira corresponda ao padrão especificado para cada linha.
Portanto, tanto "(123) 456-7890" quanto "(234) 567-8901" correspondem ao padrão de regex porque seguem o formato (xxx) xxx-xxxx, que o regex foi projetado para corresponder.
Armadilhas Comuns
mafeta apenas^e$, não.— O ponto ainda não corresponde a uma nova linha. Se você precisar que.também cruze quebras de linha, use a flags(dotAll) separada. A flagmmuda onde as linhas começam e terminam; a flagsmuda o que.corresponde.mnão é o mesmo que corresponder a palavras inteiras. Para corresponder nas bordas de uma palavra em vez de uma linha, use a fronteira de palavra\bem vez de^/$.- Sem
g,match()retorna apenas a primeira ocorrência. A flagmhabilita posições de âncora extras, mas você ainda precisa degpara coletar cada linha. Combine-as comogm.
Conclusão
A flag m em expressões regulares JavaScript estende a funcionalidade das âncoras ^ e $ para corresponder ao início e ao fim de cada linha em uma string multilinha. Essa capacidade é inestimável para o processamento de dados de texto multilinha, permitindo uma correspondência e validação precisas de padrões linha por linha.