¿Cómo puedo solucionar el error “grupo no válido” al intentar utilizar “mejorado” coincidencia de patrones de expresión regular URL de Gruber en JavaScript?

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

  •  01-10-2019
  •  | 
  •  

Pregunta

Estoy tratando de integrar Un liberal Mejora de John Gruber, exacto patrón de expresión para las direcciones URL a juego en una de mis Javascripts, pero el inspector de WebKit (en Google Chrome 5.0.375.125 para Mac) da un "grupo no válido" error de sintaxis de expresiones regulares.

expresión regular original del Gruber es el siguiente:

(?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 línea de mi JavaScript w / la expresión regular es el siguiente (barra invertida escapado-w / barras diagonales):

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)

Y el error de Google Chrome es el siguiente:

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

Y el error Safari es el siguiente:

SyntaxError: Invalid regular expression: unrecognized character after (?

Afirma que debería funcionar en los modernos intérpretes de expresiones regulares de JavaScript, que Me asumir WebKit y V8 serían. la sintaxis de expresiones regulares de ciervas JavaScript no apoyar la (?: (maldito Google por no indexación de puntuacion!) que agrupa sintaxis? Qué acabo de menos escapar algo?

¿Fue útil?

Solución

Gah, fue el modo modificador (es decir, el (?i)) al principio de la expresión regular!

Me pasó por datails de Regular-Expressions.info en "Sabor de expresiones regulares de JavaScript" , específicamente la lista de lo que es no apoyado, y allí estaba el 'modo de modificador', que ya había especificado tras el cierre de barra diagonal de la expresión regular. Arrancado a cabo un todo parece ir bien.

Por lo tanto, mi expresión regular JavaScript es ahora de la siguiente manera:

/\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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top