Genau das hat mir auch sorge bereitet und *ich* habe keine Möglichkeit gesehen, wie ich das allg. formuliert bekomme.
So z.B.
var results = /(?:[?&]mode=page(?:&[^&]+)*&id=([0-9]+)|[?&]id=([0-9]+)(?:&[^&]+)*&mode=page)/.exec(url);
var id = results ? (results[1] || results[2]) : undefined;
id ist jetzt entweder eine Zahl oder undefined.
Aufgedröselt:
Reihenfolge mode/page
(?:
[?&]mode=page # mode-Parameter am Anfang des Query-Strings oder mittendrin
(?:&[^&]+)* # beliebe Anzahl von weiteren Parametern (davon ausgehend, dass & sie trennt)
&id=([0-9]+) # id-Parameter am Ende
|
Reihenfolge page/mode
[?&]id=([0-9]+) # id-Parameter am Anfang des Query-Strings oder mittendrin
(?:&[^&]+)* # weitere Parameter (s.o.)
&mode=page # mode-Parameter am Ende
)
Das ?: am Anfang der Klammern führt dazu, dass diese Teiltreffer nicht im ergebnis-Array auftauchen.
Leg mich nicht darauf fest, dass das zuverlässig funktioniert, siehe voriges Posting. Es ist möglich, aber nicht unbedingt besserer Code.
Mathias