Eu não sabia o poder do regex até estudar a fundo no curso JavaScript Expert
Vale a pena aprender Regex mesmo com chat gpt e github copilot na jogada?
Isso é algo que pensava um tempo atrás, pra mim já não fazia sentido me aprofundar a entender regex visto que pedindo pro chat gpt a criação de uma validação pra uma string, ele me entregava pronto.
Na grande parte das vezes funcionava, rs.
Eu colocava a expressão pra validar no regex101.com e em grande parte das vezes funcionava…
Porém no vscode existe uma ferramenta de busca que pode ser aplicada regex
E em projetos que precisamos lidar com json enormes e fazer validações e/ou buscas neles ter o regex nas mãos pra ajudar é fundamental.
No vscode o find e replace tem a opção de adicionar regez na busca pra evitar alterações manuais:
Se liga nessa demo:
Basicamente eu pesquiso por .(\w+):\s. onde:
.
: Este é um caractere especial que corresponde a qualquer caractere, exceto uma nova linha.(\w+)
: Este é um grupo de captura que corresponde a uma ou mais ocorrências de qualquer caractere de palavra (equivalente a[a-zA-Z0-9_]
).:
: Este é um caractere literal que corresponde ao caractere de dois pontos:
.\s
: Este é um caractere especial que corresponde a qualquer espaço em branco (equivalente a[ \t\r\n\f]
)..
: Novamente, este é um caractere especial que corresponde a qualquer caractere, exceto uma nova linha.
Então, a expressão regular ".(\w+):\s."
vai correspoder a qualquer string que tenha um caractere, seguido por uma ou mais ocorrências de qualquer caractere de palavra, seguido por um caractere de dois pontos, um espaço em branco e outro caractere. Por exemplo, ela corresponderá a strings como "nome: "
ou "rua: "
.
E por fim substituo por:
$1
na qual é referência de retrocesso usada em operações de substituição com expressões regulares.
Ela se refere ao conteúdo do primeiro grupo de captura na expressão regular.
Grupos de captura são partes de uma expressão regular que são colocadas entre parênteses ()
. Durante uma correspondência, o conteúdo que corresponde a cada grupo de captura é "lembrado" e pode ser referenciado posteriormente.
Por exemplo, se você tiver a expressão regular (\w+):\s
, ela corresponderá a uma ou mais letras seguidas por dois pontos e um espaço. Se você usar essa expressão regular em uma operação de substituição e usar $1
na string de substituição, $1
será substituído pelo conteúdo que correspondeu a (\w+)
na string original.
Quanto tempo não ganhamos com isso?
Usar regex pra otimizar nosso tempo de codificação é daora demais! De fato podemos ter ajuda de alguma IA, porém saber como conseguimos usar a nosso favor, otimizamos até o tempo de pesquisa perguntando como que pesquisa x, y, z…
Na pesquisa que mostrei acima otimizei coisa de minutos criando meu construtor, mas já tive que lidar com json enormes em migrações de sistemas ou deploys… copiar e colar um json enorme num prompt de IA para pedir que busque o que precisamos pode além de ser perigoso muito demorado.
Cuidado com Regex não Seguras em Apps Node.js
Um artigo fenomenal do Liran Tal me trouxe um insight que eu nunca parei pra pensar: Regex não tratadas ou com vulnerabilidades podem deburrar meu app ou tornar ele acessível a ataques!
Aqui está o link completo para você dar uma lida → How a RegEx can bring your Node.js service down
Executando uma das expressões regulares que o artigo traz de exemplo é possível ver o tanto de CPU que consome do meu Mac!
Roda num loop e quebra tudo!
Basicamente o que acontece é que não é previsto um regex com um backtracking enorme.
Como resolve isso?
No artigo o Liran da algumas dicas de validações, no caso dos meus estudos um caso de teste dentro de uma classe util que valida se o regex é safe ou não foi uma boa alternativa também:
Você sabia de tudo isso?
Pode ser que você sabia da existência do regex, mas foram poucos devs na vida que encontrei que sabiam realmente como usar como developer experience em otimização de tempo e pela primeira vez vi que um regex pode realmente derrubar minha aplicação Node.js a fim de deixá-la vulnerável!
Olha o que risco de tudo isso!
Dica de ouro 💖
Tá, você se interessou pelo conteúdo e quer entender mais?
Infelizmente ainda não abriu vagas pra nova turma do JS Expert, porém vou indicar um curso incrível do Erick para você que quer usar testes automatizados a seu favor:
MÉTODO DE TESTES AUTOMATIZADOS COM JAVASCRIPT
A gente só sabe o valor de bons conteúdos quando passamos por perrengues reais e nenhum link da internet ajuda a gente, rs
Então fica a dica de estudo pra você!