J'ai écrit une expression régulière plutôt lourde à utiliser dans un projet coffee-script
. Il est prévu de prendre un gros morceau de texte utilisateur (messages, messages, prose) et de trouver toutes les URL potentielles là-bas, étant aussi gourmand que possible.URL Guesser Optimisation RegExp
urlGrabber = ///
(\s|^) # Start after a whitespace or string[0]
([a-zA-Z]+\://)? # Captures any protocol (just not //)
(\w+:\[email protected])? # Username:Password
([a-zA-Z\d-]|[a-zA-Z\d-]\.)* # Subdomains
[a-zA-Z\d-]{2,} # Domain name
\. # THE DOT
([a-zA-Z]{2,4}(:\d+)?) # Domain Extension with Port
([/\?\#][\S/]*)* # Some Request, greedy capture
\b # Last word boundary
/? # Optional trailing Slash
///g
Je suis en cours d'exécution avec des problèmes comme chaîne abc.mno.st.u.xvy
où abs.mno.st
obtient analysables comme une chaîne. Cela ne devrait pas être capturé du tout. Idem pour as.ds.d.
où as.ds
est capturé.
Quelqu'un peut-il expliquer pourquoi cela se produit et/ou aider avec les changements nécessaires pour résoudre ce problème?
On ne sait pas très bien ce que vous ne voulez pas faire correspondre. Ajouter un espace '\ s' à la fin résoudrait-il votre problème? – Tim
ça aide, mais il semble que je mange mon espace blanc. Comment est-ce que je peux correspondre mais ne pas consommer ceux qui suivent \ s? – arvidkahl