Substituindo strings com expressões regulares no JavaScript


Leia em menos de um minuto

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(/<([^>]+)>(.*?)<\/>/, "$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.