Zum Hintergrund siehe z.B.
JavaScript String replace() Method Der replace()-Befehl erwartet
a) einen String oder
b) einen regulären Ausdruck.
Deine Versuchsanordnungen waren mit einem String aufgebaut. Aber damit bekommst Du keine Wiederholungen zum Greifen:
Und weiter
Struktur des regulären Ausdrucks beim replace()-Befehl:
Da das Ausrufezeichen bei regulären Ausdrücken als Negation dient, muss es mit einem Backslash escaped werden, wenn es als Ausrufezeichen verwendet werden soll.
g und i sind Modifikatoren.
g steht für global - alle und nicht nur die erste gefundene Stelle ändern;
i steht für case insensitive (Groß-/Kleinschreibung nicht beachten).
Beide Modifikatoren sind optional, können verwendet oder nicht verwendet werden.