Fabio Donatantonio

Resta connesso

Software Developer / Adjunct Professor

Str_replace Javascript

Coloro che sviluppano quotidianamente in Javascript si saranno imbattuti almeno una volta in un problema piuttosto semplice da risolvere con linguaggi di programmazione come Java, PHP, C ecc.. ma non così immediato in Javascript: sostituire tutte le occorrenze di una stringa all’interno di un’altra stringa.
In Javascript non esiste una funzione pronta che effettui questo tipo di “lavoro“, infatti la replace(stringa, new_stringa) sostituisce solo la prima occorrenza di “stringa” e non le eventuali successive. In rete, fortunatamente, sono presenti svariate soluzioni le quali, solitamente, utilizzando espressioni regolari per determinare la sostituzione.

In questo articolo vedremo una possibile soluzione che non utilizza espressioni regolari bensì un semplice ciclo while combinato con le funzioni indexOf, substring e replace di Javascript. Il codice della funzione str_replace è il seguente:

<script type='text/javascript'>
function str_replace(s_search, s_replace, s_subject){
    var pointer = 0;
    while(s_subject.indexOf(s_search,pointer)!=-1){
        pointer = s_subject.indexOf(s_search,pointer);
        s_subject = s_subject.substring(0,pointer) + s_subject.substring(pointer).replace(s_search,s_replace);
        pointer = pointer + s_replace.length; 
    }
    return s_subject;
}
</script>

La funzione può essere così richiamata:

var new_stringa = str_replace(str_da_cercare,str_da_sostituire,str_originale);

Analizziamo brevemente il codice della funzione str_replace.

Acquisisco tre parametri: stringa da cercare, stringa da sostituire, stringa su cui operare.
Imposto una variabile pointer a 0 (inizio stringa).
Ciclo sulla stringa fino a che indexOf è vera. Bisogna ricordare che indexOf restituisce la posizione della prima occorrenza di stringa da cercare:

s_subject.indexOf(s_search,pointer)

Con l’aiuto della variabile pointer effetto il taglio in due della stringa originale andando a sostituire con una replace la sotto-stringa trovata nella seconda parte di stringa originale:

s_subject = s_subject.substring(0,pointer)+s_subject.substring(pointer).replace(s_search, s_replace);

nel frattempo incremento pointer avanzando nella stringa:

pointer = pointer + s_replace.length;

La funzione può sembrare complessa nel suo insieme ma svolge in maniera adeguata il suo compito. Inutile sottolineare che questa è solo una possibile soluzione.
N.B. La funzione appena realizzata è case sensitive.

Cliccando qui è possibile vedere in azione il codice.

Cliccando qui è possibile scaricare il codice.

Fabio Donatantonio

Fabio Donatantonio. Analista e sviluppatore full-stack di applicazioni web in linguaggio PHP. Professore a Contratto per le cattedre di Fondamenti di Informatica e Archivistica Digitale presso Università degli Studi eCampus. Dal 2008 curatore del sito www.donatantonio.net, da sempre appassionato di programmazione, mare, sigari e... musica.

Leave a reply

Your email address will not be published. Required fields are marked *

 

Didattica

Università degli Studi eCampus
Data Evento
09/02/2021
14:30
Esame Archivistica Digitale e Informatica per le Scienze Umane - Cds Letteratura, Lingua e Cultura Italiana - Lettere
09/02/2021
14:30
Esame Introduzione all'Archivistica Digitale e all'Informatica per le Scienze Umane - Cds Letteratura, Arte, Musica e Spettacolo - Lettere
09/02/2021
17:30
Esame Abilità Informatiche e Telematiche - Cds Design e Discipline della Moda - Lettere
09/02/2021
17:30
Esame Abilità Informatiche e Telematiche - Cds Letteratura, Arte, Musica e Spettacolo - Lettere
Risorse
Guida HTML/CSS per principianti (link)
Introduzione agli ipertesti (link)
Esercizi guidati in Java (link)
Intelligenza artificiale (link)
Libri
Fondamenti di Informatica (2011) (link)
Informatica per le Scienze Umane (2011) (link)
Fondamenti di Informatica (2014) (link)
Pagina Docente
uniecampus.it - Scheda Docente (link)
Contatti
fabio.donatantonio[at]uniecampus.it

JWhisper, sviluppato presso il Dipartimento di Informatica Applicata dell'Università degli Studi di Salerno:

Stay Connected

Twitter

Le mie foto

Foto di Fabio Donatantonio
×