Esta é uma postagem simples e rápida sobre técnicas de JavaScript. Vamos abordar como usar a expressão regular acionada pelo replace(..)
com JavaScript string
valores.
Todos string
têm um replace(..)
disponível para eles. Esse método permite que o usuário passe uma expressão regular (ou um string
que será interpretada como o padrão de uma expressão regular criada dinamicamente!) para representar o que deve ser encontrado na página principal do string
para substituição.
Único vs. Global
Considere:
var a = "The quick brown fox jumped over the lazy dog."; var pattern = /the/i; a.replace( pattern, "THE" ); // THE quick brown fox jumped over the lazy dog.
O senhor pode ver que apenas o primeiro “The” foi substituído. Muitos desenvolvedores simplesmente deixam esse fato como está e nunca perguntam “Por quê?”.
Bem, é porque o senhor não usou um global (ou seja, com a expressão regular g
), portanto, claramente o JS só aplica a expressão em um único contexto. Veja:
var a = "The quick brown fox jumped over the lazy dog."; var pattern = /the/ig; // notice "g" here now! a.replace( pattern, "THE" ); // THE quick brown fox jumped over THE lazy dog.
O substituto string
("THE"
em nosso exemplo) pode incluir alguns comandos especiais, como “$1” para inserir o valor do primeiro ( )
(não há nenhum em nosso exemplo!).
function
Como substituto
E se o senhor quisesse fazer uma substituição mais sofisticada, como, por exemplo, colocar qualquer uma das palavras encontradas em maiúsculas, usando um padrão como este?
var pattern = /quick|brown|lazy/ig;
Obviamente, a codificação do "THE"
replacer string
não funcionará agora!
Mas é um fato pouco conhecido que o substituto pode ser um function
em vez disso. Por exemplo:
var a = "The quick brown fox jumped over the lazy dog."; var pattern = /quick|brown|lazy/ig; a.replace( pattern, function replacer(match){ return match.toUpperCase(); } ); // The QUICK BROWN fox jumped over the LAZY dog.
O function
recebe vários argumentos. O primeiro é sempre a string correspondente, que geralmente é tudo o que o senhor deseja/precisa. Se o padrão tiver algum ( )
esses serão passados como o(s) próximo(s) argumento(s). O próximo argumento será a posição numérica indexada da correspondência na cadeia maior.
O argumento final é o argumento completo do original string
que está sendo substituído, e não o valor atual da cadeia de caracteres em andamento que está sendo processado.
Outro lugar onde o function
é útil se a cadeia de caracteres que o senhor está substituindo já tiver algum dos substituidores especiais string
como, por exemplo, “$1”, porque o comando return
ed da função não é interpolado como o valor regular do string
regular é:
var prices = { "pr_1": "$1.99", "pr_2": "$9.99", "pr_3": "$5.00" }; var template = ".."; // some ecommerce page template template.replace( /(<span id=")(.*?)(">)(<\/span>)/g, function(match,$1,$2,$3,$4){ return $1 + $2 + $3 + prices[$2] + $4; } );
O valor "$1.99"
não poderia ter sido usado como um string
porque “$1” teria sido interpretado como a primeira correspondência. A única outra opção é fazer o pré-escape de seu string
como “$$1.99”, mas ninguém quer fazer isso, então o function
é melhor.
Resumo
Expressão regular string
replace é um mecanismo mais avançado do que a maioria dos desenvolvedores atribui ao JS.
Global /g
expressões regulares e function
valores de substituição são apenas alguns dos recursos úteis, mas não tão conhecidos, dos padrões de expressão regular e replace(..)
.
Sobre Kyle Simpson
Kyle Simpson é um engenheiro de software orientado para a Web, amplamente aclamado por sua série de livros “You Don’t Know JS” e por quase 1 milhão de horas vistas de seus cursos on-line. O superpoder de Kyle é fazer perguntas melhores, e ele acredita profundamente no uso máximo das ferramentas minimamente necessárias para qualquer tarefa. Como um “tecnólogo centrado no ser humano”, ele é apaixonado por unir humanos e tecnologia, desenvolvendo organizações de engenharia para resolver os problemas certos, de maneiras mais simples. Kyle sempre lutará pelas pessoas por trás dos pixels.