Mr. Horse: RegExp-Objekt, exec und der Safari (Mac)

Beitrag lesen

Hallo,

ich setze einen recht einfachen regulären Ausdruck mehrfach in einem Script ein und habe ihn daher einer Variablen zugewiesen.
Leider scheint der Safari unter Mac OS X damit ein Problem zu haben.
Gelernt habe ich bereits, daß ich exec() verwenden muß, damit auch der Mac-Safari auf die Subpatterns (RegExp.$n) zugreifen kann.
Aber nun verhält er sich beim zweiten Gebrauch des RegExp-Objekts so, als müsse das Objekt erst neu "initialisiert" oder "zurückgesetzt" werden.

Kennt Ihr dieses Phänomen?

Hier der Code:
var regexpIdFragment = new RegExp('\?(' + settings.idPrefixContentFragments + '-\d+)', 'g');
//...
if(regexpIdFragment.exec(urlInitial)) {
   idCurrentFragment = RegExp.$1;
}
//...
if(regexpIdFragment.exec(urlCurrent)) {
   idCurrentFragment = RegExp.$1;
}
//...
In dieser Version liefert exec() beim zweiten Mal im Mac-Safari null, so daß der zwiete if-Block übergangen wird.

Das hier dagegen klappt auch im Mac-Safari:
var regexpIdFragment = new RegExp('\?(' + settings.idPrefixContentFragments + '-\d+)', 'g');
//...
if(regexpIdFragment.exec(urlInitial)) {
   idCurrentFragment = RegExp.$1;
}
//...
regexpIdFragment.exec(urlCurrent)
if(regexpIdFragment.exec(urlCurrent)) {
   idCurrentFragment = RegExp.$1;
}
//...

Ebenso wie dies hier:
var regexpIdFragment = new RegExp('\?(' + settings.idPrefixContentFragments + '-\d+)', 'g');
//...
if(regexpIdFragment.exec(urlInitial)) {
   idCurrentFragment = RegExp.$1;
}
//...
regexpIdFragment = new RegExp('\?(' + settings.idPrefixContentFragments + '-\d+)', 'g');
if(regexpIdFragment.exec(urlCurrent)) {
   idCurrentFragment = RegExp.$1;
}
//...

Ich meine: OK, es funktioniert - aber es ist umständlich und blöde.
Habt Ihr Tipps? Und kennt Ihr vor allem die Ursache dieses Phänomens?

Thanx und ciao,
Andreas

--
No, Sir, I don't like it.