Blaubart: undefined als Ergebnis in RegExp

Beitrag lesen

Tach.

Folgendes Minimalbeispiel für einen RegExp in Javascript:

  
var s = "watt soll 'n ditt";  
var pattern = /^(watt)( soll)? ('n ditt)$/;  
var matches = pattern.exec(s);  

Als Ergebnis erhalte ich erwartungsgemäß ["watt soll 'n ditt", "watt", " soll", "'n ditt"].

Überhaupt nicht erwartungsgemäß ist jedoch das Ergebnis für die Zeichenkette "watt 'n ditt". Ich erhalte ["watt 'n ditt", "watt", undefined, "'n ditt"].

Was hat "undefined" im Ergebnis zu suchen? Wenn für den optionalen Teilausdruck nur der Quantifier "keinmal" greift, erwarte ich, daß im Ergebnisarray auch bloß ein leerer String dafür auftaucht – nichts Undefiniertes. Ein nachfolgender Test mit PHPs preg_match() brachte genau dieses Ergebnis. Ich habe keinen Hinweis darauf gefunden, daß RegExps in Javascript an dieser Stelle mit "undefined" antworten sollen. Opera und Firefox scheinen sich hier aber einig zu sein, denn beide liefern "undefined". Der IE 5 hingegen liefert das von mir erwartete Ergebnis, was mich natürlich sofort mißtrauisch macht. ;)

Was läuft hier verkehrt?

--
Once is a mistake, twice is Jazz.