O JavaScript, embora considerado uma Toy Language, possui uma série de detalhes que nem todos conhecem. Um deles está no modo como a função String#replace funciona.

O modo mais simples de usá-la é passando uma expressão regular e uma string que será usada na substituição.

string = "2 hours from now";
string.replace(/2/, "3");
// "3 hours from now"

Você também pode utilizar grupos na substituição.

string = "<strong>JavaScript</strong>";
string.replace(/<([^>]+)>(.*?)<\/\1>/, "$2");
// "JavaScript"

Às vezes, queremos fazer alguma operação matemática com algum número. E é aí que entra um "truque" que nem todos conhecem. A função String#replace permite passar uma função, cujo retorno será usado na substituição.

string = "1 + 1 = ?";
string.replace(/(\d+) \+ (\d+) = \?/, function(expression, n1, n2){
  return n1 + " + " + n2 + " = " + (parseInt(n1, 10) + parseInt(n2, 10));
});
// 1 + 1 = 2

Esta é uma funcionalidade desconhecida, mas que pode facilitar muito a sua vida em alguns casos.

Comentários #

#1 PotHix disse:
19 Jan 11, 09:40PM

Æ!!

Que legal, não conhecia esse esquema de passar uma função como argumento!
Boa!

Há braços

#2 Willian Fernandes disse:
20 Jan 11, 05:11AM

De nada pela idéia do post! :)
Zuera...
Essa solução me ajudou muito a replicar, dinamicamente, campos nested em um formulário Rails...

Valeu!

#3 Diego Oliveira disse:
21 Jan 11, 08:49AM

Interessante essa função de callback passada no argumento. E mais interessante o termo "toy language" que eu não conhecia! :)

#4 Kleber Virgilio Correia disse:
21 Jan 11, 01:53PM

Nunca ia imaginar q era possível passar uma função como parâmetro.

Eu nunca fui afundo no JS...
Meus códigos JS eu sempre uso muito ERs (ñ sei se do jeito correto) em replace e match's... pergunto isso é normal?? Até pq ñ fica um código mto claro.

[]'s

#5 Humberto disse:
28 Jan 11, 01:31PM

...embora considerado uma Toy Language [by whom?][citation needed]

#6 Nando Vieira disse:
29 Jan 11, 01:33AM

Experiência pessoal, muitas pessoas que conheço, diversos posts que já li. Isso só está mudando agora ~ http://bit.ly/hz3xUM

#7 Felipe disse:
08 Fev 11, 02:28AM

Muito interessante, não sabia também que fosse possivel passar uma função como argumento,
bacana o post, sucesso !

#8 Willian Fernandes disse:
05 Mar 11, 02:44PM

Parece que o IE, pelo menos na versão 8 não permite utilizar funções no comando replace...

Deixe um comentário





Não é aceito código HTML: adicione-o no pastie.org ou paste.milk-it.net e poste apenas o link.

Se este é seu primeiro comentário, ele terá que ser aprovado antes de ser exibido.

jQuery: Dominando o framework

Você quer aprender a usar jQuery de verdade? Então chegou a hora! Neste workshop você verá como funciona este framework de JavaScript, entendendo todos os aspectos que fazem do jQuery uma das melhores ferramentas para desenvolvimento de interfaces.

Saiba mais Fechar

Conheça também o HOWTO