Diese Frage ist ein Follow-up für den folgenden Beitrag: Javascript regex: Find all URLs outside <a> tags - Nested TagsJavascript regex: Hier finden Sie alle URLs Optimierung
Ich entdeckte, dass der Code:
\b((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
extrem ineffizient ist im Vergleich zu separat Ausführung für http
und ftp
Teil wie folgt aus:
\b(https?:\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
und
\b(ftps?:\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
Hier sind einige Beispiele an regex101.com:
- 1. Methode - 6395 steps
- 2. Methode - 3393 steps + 863 steps
jedoch in einer meiner HTML-Seite diese Codes vergleicht als Schritte vs. 7258 + 795 st Eps, das ist ziemlich verrückt.
Soweit ich gesehen habe, reduziert die Verwendung von (x|y) Muster die Ausführungslänge, aber hier wahrscheinlich aus einem seltsamen Grund ist es anders.
Jede Hilfe wäre willkommen.
Was ist das letzte Glied in Ihren Beispieldaten? Es ist mit '' gemeint. Sie können jedoch den Lookahead nach einem festen Teil Ihrer Regex setzen, um Schritte zu reduzieren. Probieren Sie ['\ b (?: Htt | ft) ps?: \/\/(?! [^ <>] *> | [^"] *? <\/A) [^ "<\ s] +' ] (https://regex101.com/r/tZ1yY2/1). Der bessere Weg wäre, [diesen Trick] (http://www.rexegg.com/regex-best-trick.html#thetrick) zu verwenden, um das zu erreichen, was du nicht willst, aber erfasse, was du brauchst: [' | <[^>] +> | \ b ((?: Htt | ft) ps?: \/\/[^ "<\ S] +)'] (https://regex101.com/r/tZ1yY2/2) , Javascript regex unterstützt Atomic Groups nicht –