Problem mit regläruem Ausruck
Jonny 5
- sonstiges
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
Problem mit regläruem Ausruck
Oops, schade daß es keine Vorschau für den Titel gibt *g*
Deitsches Sprak sweres Sprak
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
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