Questa domanda è un follow-up per il seguente post: Javascript regex: Find all URLs outside <a> tags - Nested TagsJavascript regex: Trova tutti gli URL ottimizzazione
ho scoperto che il codice:
\b((https?|ftps?):\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
è estremamente inefficiente rispetto al eseguendolo separatamente per http
e ftp
parte in questo modo:
\b(https?:\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
e
\b(ftps?:\/\/[^"<\s]+)(?![^<>]*>|[^"]*?<\/a)
Ecco alcuni esempi in regex101.com:
- 1 ° metodo - 6395 steps
- secondo metodo - 3393 steps + 863 steps
Tuttavia, in uno dei miei pagina HTML questi codici confronta come gradini contro 7258 + 795 st eps, è abbastanza folle.
Per quanto ho visto, l'uso del modello (x|y) riduce la lunghezza di esecuzione ma qui probabilmente per una strana ragione è altrimenti.
Qualsiasi aiuto sarebbe apprezzato.
Che dire l'ultimo anello tuoi dati di esempio? È wihtin ''. Tuttavia, puoi ridurre l'aspetto dopo una parte fissa della tua espressione regolare per ridurre i passaggi. Prova ['\ b (?: Htt | ft) ps?: \/\/(?! [^ <>] *> | [^"] *? <\/A) [^ "<\ s] +' ] (https://regex101.com/r/tZ1yY2/1). Il modo migliore sarebbe usare [questo trucco] (http://www.rexegg.com/regex-best-trick.html#thetrick) per trovare ciò che non vuoi ma catturare ciò di cui hai bisogno: [' | <[^>] +> | \ b ((?: Htt | ft) ps?: \/\/[^ "<\ S] +)'] (https://regex101.com/r/tZ1yY2/2). Btw , L'espressione regolare di Javascript non supporta i gruppi atomici –