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.
- Permalink
- Trackback
- Comentários (8)
- Ao som de: Metallica – My Apocalypse
Textos escritos por
Comentários #
Æ!!
Que legal, não conhecia esse esquema de passar uma função como argumento!
Boa!
Há braços
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!
Interessante essa função de callback passada no argumento. E mais interessante o termo "toy language" que eu não conhecia! :)
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
...embora considerado uma Toy Language [by whom?][citation needed]
Experiência pessoal, muitas pessoas que conheço, diversos posts que já li. Isso só está mudando agora ~ http://bit.ly/hz3xUM
Muito interessante, não sabia também que fosse possivel passar uma função como argumento,
bacana o post, sucesso !
Parece que o IE, pelo menos na versão 8 não permite utilizar funções no comando replace...
Deixe um comentário