Flags
As flags são opções que podemos passar para a nossa regex, alterando assim alguns comportamentos padrões na hora de realizar uma busca no texto.
G
Por padrão, a regex vai parar de realizar a busca pelo padrão assim que encontrar o primeiro match, ao passar a flag g
, a busca se tornara global no texto.
const regex = /a/
const regexGlobal = /a/g
const text = 'aqui tem uma mensagem'
console.log(text.match(regex).length) // 1
console.log(text.match(regexGlobal).length) // 3
Na primeira regex, o nosso padrão especificado era a letra a
, então na hora do match, ele apenas buscou pelo primeiro a
que encontrasse.
Já no segundo exemplo, o padrão é o mesmo, porém com o adicional da flag g
, agora a procura sera feita por todos os a
que encontrar.
I
A flag i
serve para que o nosso padrão se torne case insensitive. Por padrão, a regex diferencia letras maiúsculas de maiúsculas, com a flag i
, essa diferenciação é removida.
const regex = /t/
const regexCaseInsencitive = /t/i
const text = 'Tem uma mensagem aqui'
console.log(text.match(regex).length) // 0
console.log(text.match(regexCaseInsencitive).length) // 1
Na primeira regex, o nosso padrão especificado era a letra t
, então na hora do match, ele apenas buscou pelo primeiro t
minúsculo que encontrasse.
Já no segundo exemplo, o padrão é o mesmo, porém com o adicional da flag i
, agora a procura sera feita tanto pela letra t minúscula t, como maiúscula T.
M
A flag m
habilita o modo multiline para os meta caracteres ^
e $
(veremos mais para frente sobre eles).
const regex = /^T/
const regexMultiline = /^T/gm
const text = `
Tem uma mensagem aqui
Tem outra mensagem aqui
`
console.log(text.match(regex).length) // 1
console.log(text.match(regexMultiline).length) // 2
Na primeira regex, o nosso padrão especificado era de buscar a letra T, exatamente no começo do texto, então na hora do match, ele buscou no início do texto algo que começasse com a letra T.
Já no segundo exemplo, o padrão é o mesmo, porém com o adicional das flags m
e g
, com a flag m
, agora ele vai tratar o meta caractere ^
para olhar não mais para o início do texto, e sim para o início da linha, e como colocamos a flag g
junto, a regex vai procurar no início de todas as linhas.
S
A flag s
assim como a m
, altera o comportamento de um meta caractere, que no caso é o .
. O ponto significa qualquer coisa, exceto quebras de linha, com a flag s
, o ponto passa a significar também as quebras de linha.
const regex = /.+/
const regexDotAll = /.+/s
const text = `
Tem uma mensagem aqui
Tem outra mensagem aqui
`.trim()
console.log(text.match(regex))
// [`Tem uma mensagem aqui`]
console.log(text.match(regexDotAll))
// ['Tem uma mensagem aqui\nTem outra mensagem aqui']