Sto tentando di integrare lo An Improved Liberal, Accurate Regex Pattern for Matching URLs di John Gruber in uno dei miei Javascripts, ma l'ispettore di WebKit (in Google Chrome 5.0.375.125 per Mac) restituisce un errore di sintassi delle espressioni regolari di "Gruppo non valido". regexp originaleCome si corregge l'errore "gruppo non valido" quando si tenta di utilizzare l'URL "migliorato" di Gruber che corrisponde al modello regexp in JavaScript?
di Gruber è la seguente:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
La linea dal mio JavaScript w/l'espressione regolare è la seguente (w/slash backslash escape):
tweet_text = tweet_text.replace(/(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi, '<a href="$1">$1</a>');
e Google Chrome (? V8) errore è la seguente:
Uncaught SyntaxError: Invalid regular expression: /(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/: Invalid group
e l'errore di Safari è la seguente:
SyntaxError: Invalid regular expression: unrecognized character after (?
Egli sostiene dovrebbe funzionare nei moderni interpreti espressioni regolari JavaScript, che mi piacerebbe pensare WebKit & V8 sarebbe. La sintassi regexp di JavaScript non supporta la sintassi di raggruppamento (?:
(dannazione di Google per non indicizzare la punteggiatura!)? Ho appena perso la fuga da qualcosa?
grazie, aveva bisogno di questo per il mio progetto! –
Felice che abbia aiutato! – morgant
In realtà sto riscontrando problemi con l'abbinamento 'example.com'. "http://example.com" e "www.example.com" funzionano entrambi. Hai qualche idea? –