Sto lavorando tantissimo con Javascript in questo periodo. Molti diranno purtroppo, io invece trovo che non sia affatto quel linguaggio terribile che molti dicono. In certi casi, devo dire, è però un pò ostico, o quantomeno va controcorrente rispetto all'utilizzo "comune" di certe cose.
Per esempio, il caro metodo replace() esposto dall'oggetto stringa, accetta in ingresso una stringa di cui fare il replace e la stringa con cui cambiarla.
str = str.replace('input','output');
Il problema sta nel fatto che il metodo replace trova solo la prima occorrenza della stringa, e li si ferma... se si vogliono cambiare tutte le occorrenze di una particolare stringa, bisogna utilizzare le regular expression e, quindi, la keyword "/g" in questo modo
str = str.replace(/input/g, 'output');
Attenzione, nel caso ci sia la necessità di cambiare dei caratteri speciali, ci sono un pò più di problemi, che si risovono ricordandosi l'escape.
Per esempio, per cambiare tutte le occorrenze di '+' in una data stringa, si usa
str = str.replace(/\+/g, 'output');