Vielen Dank für Deine Antwort. Ich hab jetzt mal ein JsFiddle draus gemacht:
Leider funktioniert es noch nicht wie gewünscht. Könntest du vielleicht kurz drüberschaun was ich falsch gemacht habe.
Backslashes in JavaScript-Strings sind das Maskierungszeichen, haben also eine eigene Semantik. Wenn diese Semantik nicht zum Tragen kommen soll, musst du den Backslash seinerseits maskieren. Also statt
new RegExp('^\d{1,3}(:\d{1,2})?$')
-> new RegExp('^\\d{1,3}(:\\d{1,2})?$')
.
Noch besser für die Lesbarkeit ist es aber die Literal-Schreibweise für reguläre Ausdrücke zu verwenden, also: /^\d{1,3}(:\d{1,2})?$/
new RegExp()
benötigt man nur dann, wenn man einen regulären Ausdruck generisch zusammen bauen möchte. Das braucht man also etwa so oft wie eine Division durch Null.