Sempre gostei de explorar expressões regulares porque elas são uma daquelas habilidades que nunca são ensinadas na escola: o senhor precisa aprendê-las na hora, fazendo erros e corrigindo-os ao longo do caminho. As expressões regulares são incrivelmente poderosas, e um poder que elas têm são as chamadas “backreferences”, que basicamente permitem que o senhor use uma correspondência dentro da mesma expressão regular.
A maneira mais fácil de explicar uma backreference é com um objetivo simples: usar uma regex para simular a desestruturação. Veja o seguinte trecho de código:
const body = document.blah.body;
Com um novo e incrível recurso de linguagem como o Reestruturação do JavaScriptA melhor maneira de escrever o código acima é:
const { body } = document.blah;
Observação: Como regra geral de programação, usar expressões regulares para implementar ou simular recursos de linguagem é uma péssima ideia. Entretanto, para explicar as referências anteriores, é perfeito.
A sintaxe de backreference é \{number of match}
:
const code = "const body = document.blah.body;"; const destrcutured = code.replace(/const (\w+) = ([A-z\.]+)\.\1;/, "const { $1 } = $2;"); // const { body } = document.blah";
No exemplo acima, usamos \1
para se referir à primeira correspondência dentro da mesma expressão. Em seguida, usamos $1
para refletir a correspondência com o (\w+)
e $2
para refletir a cadeia de objetos (([A-z.]+)
). O senhor pode usar qualquer número de referências anteriores com o \{#}
. O senhor deve estar ciente de que as referências anteriores são prejudiciais ao desempenho: alguns utilitários, como o VS Code, não oferecem suporte a elas; o editor Atom oferece suporte a referências anteriores.
As expressões regulares são sempre uma aventura e sempre há mais a aprender. Minha parte favorita das expressões regulares é como um único caractere pode alterar drasticamente o resultado – tanto poder em uma quantidade condensada de código!