Jonny 5: Problem mit regläruem Ausruck

Guten Abend,

bastle eben an einem Pattern, das js-redirect-urls aus Quellcode extrahieren soll.

Soweit funktioniert es gut:

'%(document|window).location.href\s*=\s*(?("|')+\s*(?P<url>[^\s"']+)\s*\2+)?;?%is'

wobei <url> als Index dient.
Trifft zu bzw liefert url von zb:

document.location.href='test.html'
window.location.href=('test.html')
window.location.href = " test.html"

usw

Nun sollten aber auch stücke wie zb:
window.location='test.html' erkannt werden, dazu der geänderte Austruck:

'%(document|window).location(.href)?\s*=\s*(?("|')+\s*(?P<url>[^\s"']+)\s*\2+)?;?%is'

und eben dieser will einfach nicht matchen.  Der einzige Unterschied zum  vorigen ist, daß .href nun geklammert (mit ? eins | keins) ist.

Weiss vielleicht jemand, worans liegt?

herzliche Grüße, Jonny 5

  1. Problem mit regläruem Ausruck

    Oops, schade daß es keine Vorschau für den Titel gibt *g*

    Deitsches Sprak sweres Sprak

  2. Hi,

    '%(document|window).location.href\s*=\s*(?("|')+\s*(?P<url>[^\s"']+)\s*\2+)?;?%is'

    '%(document|window).location(.href)?\s*=\s*(?("|')+\s*(?P<url>[^\s"']+)\s*\2+)?;?%is'

    und eben dieser will einfach nicht matchen.  Der einzige Unterschied zum  vorigen ist, daß .href nun geklammert (mit ? eins | keins) ist.

    Ja, und da Du die capturing-Variante ( '(bla)' ) eingesetzt hast statt der non-capturing-Variante ( '(?:bla)' ), verschieben sich für die anderen capturing Klammern natürlich die Nummern, der Rück-Bezug \2 bezieht sich jetzt auf eine andere Klammer als vorher.

    Weiss vielleicht jemand, worans liegt?

    Ja, s.o.

    Tipp: Grundsätzlich capturing nur dann verwenden, wenn es auch tatsächlich gebraucht wird. Neben der Nebenwirkung mit der Änderung der Zählung hat überflüssiges capturing auch noch einen Effizienzverlust zur Folge.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi,

      Ja, und da Du die capturing-Variante ( '(bla)' ) eingesetzt hast statt der non-capturing-Variante ( '(?:bla)' ), verschieben sich für die anderen capturing Klammern natürlich die Nummern, der Rück-Bezug \2 bezieht sich jetzt auf eine andere Klammer als vorher.

      danke, das hatte ich nicht mehr gesehn, jetzt klappts natürlich.

      herzliche Grüße