Come posso correggere l'errore “gruppo non valido” quando si tenta di utilizzare “migliorato” pattern matching regexp URL Gruber in JavaScript?

StackOverflow https://stackoverflow.com/questions/3559113

  •  01-10-2019
  •  | 
  •  

Domanda

Sto tentando di integrare di John Gruber una migliore liberale, preciso schema di espressione regolare per gli URL in uno dei miei Javascript, ma ispettore di WebKit (in Google Chrome 5.0.375.125 per Mac) dà un "gruppo non valido" errore di sintassi delle espressioni regolari.

regexp originale 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>');
(? V8)

E l'errore di Google Chrome è il 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 e V8 sarebbe. sintassi regexp di non JavaScript non supporta il (?: (accidenti a Google per il non indicizzare punteggiatura!) raggruppamento sintassi? Ho appena manca sfuggire qualcosa?

È stato utile?

Soluzione

Gah, è stato il Modalità di modifica (vale a dire la (?i)) all'inizio della regex!

ho passato di Regular-Expressions.info datails su "Regular Expression Sapore di JavaScript" , in particolare l'elenco di ciò che è non ha sostenuto, e c'era la 'modalità modificatore', che avevo già specificato dopo la chiusura di barra del regex. Strappato fuori un tutto sembra bene.

Quindi, la mia espressione regolare JavaScript è ora la seguente:

/\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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top