Hallo Nico R.,
die HTML Spec besagt, dass die Regex im pattern-Attribut nicht 1:1 nach JavaScript übertragen wird. Statt dessen wird sie mit
"^(?:" + pattern + ")$"
umhüllt, bevor sie der JavaScript-Engine zur Auswertung anvertraut wird.
^ und $ verankern die Regex am Anfang und Ende des geprüften Texts, und die Klammerung mit (: )
erzeugt eine non-capturing group - d.h. der Inhalt wird gegen den Text gematcht, es wird aber nichts gespeichert, was sich später als "gib mir den Inhalt der x-ten gematchten Klammergruppe" abfragen ließe. Ich nehme an, das hat Performancegründe und soll mögliche Speicherüberlaufattacken erschweren.
Ohne die Verankerung mit ^ und $ matcht deine Regexp erfolgreich die 1 und hört vor dem b auf. Mit der Verankerung merkt sie, dass hinter der 1 der String nicht zu Ende ist und schlägt fehl.
Rolf
sumpsi - posui - obstruxi