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!