JavaScript possui o replace()
método String objeto para substituir substrings. Este método pode ter dois argumentos. O primeiro argumento pode ser uma sequência de caracteres ou um padrão de expressão regular (objeto regExp) e o segundo argumento pode ser uma sequência de caracteres ou uma função. Um exemplo de replace()
método com os dois argumentos de sequência é mostrado abaixo.
var text = 'one, two, three, one, five, one';
var new_text = text.replace('one', 'ten');
console.log(new_text) //ten, two, three, one, five, one
Observe que, se o primeiro argumento for a cadeia, apenas a primeira ocorrência da substring será substituída como no exemplo acima. Para substituir todas as ocorrências da substring, é necessário fornecer uma expressão regular com um g
sinalizador (global). Se você não fornecer o sinalizador global, apenas a primeira ocorrência da substring será substituída, mesmo se você fornecer a expressão regular como o primeiro argumento. Então, vamos substituir todas as ocorrências one
no exemplo acima.
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, 'ten');
console.log(new_text) //ten, two, three, ten, five, ten
Observe que você não quebra o padrão de expressão regular entre aspas, o que tornará uma sequência não um objeto regExp. Para fazer uma substituição sem distinção entre maiúsculas e minúsculas, é necessário fornecer sinalizador adicional i
que torne o padrão sem distinção entre maiúsculas e minúsculas. Nesse caso, a expressão regular acima será /one/gi
. Observe a i
bandeira adicionada aqui.
Se o segundo argumento tiver uma função e se houver uma correspondência, a função será passada com três argumentos. Os argumentos que a função obtém são a correspondência, a posição da correspondência e o texto original. Você precisa retornar com o que essa correspondência deve ser substituída. Por exemplo,
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, function(match, pos, text){
return 'ten';
});
console.log(new_text) //ten, two, three, ten, five, ten
Você pode ter mais controle sobre o texto de substituição usando uma função como o segundo argumento.
str_replace
também aceita duas matrizes do mesmo comprimento, onde cada sequência na primeira matriz é substituída pela sequência na segunda matriz no mesmo índice. Consulte stackoverflow.com/a/5069776/296430 para a única função correta que encontrei até agora que imita esse comportamento exato em javascript.