2011-08-03 12 views
8

estoy tratando de utilizar John Gruber's URL regex en Javascript, pero NetBeans me dice que hay un error de sintaxis y errores ilegales:URL expresión regular no funciona en javascript

var patt = "/(?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`!()\[\]{};: 
'".,<>?«»“”‘’]))/"; 

Alguien sabe cómo resolver esto?

+0

Creo que se necesita para proporcionar también información sobre lo que se supone que la expresión que hacer (media) de esa manera es más fácil de comprobar. – aevanko

+1

@Issun: Es este patrón: http://daringfireball.net/2010/07/improved_regex_for_matching_urls – Flambino

+0

Esta expresión regular no funciona para los sitios que no comienzan con www – Huangism

Respuesta

18

Como han dicho otros, es la comilla doble. Pero alternativamente, puede escribir la expresión regular como un literal en javascript (pero luego debe escaparse de las barras diagonales en las líneas 1 y 3 en su lugar).

var regexp = /\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`!()\[\]{};:'".,<>?«»“”‘’]))/i; 

I también se trasladó el modificador caso-insensible a la final. Simplemente porque. (Editar: Bueno, no solo "porque" - vea el comentario de Alan Moore a continuación)

Nota: Si usa un literal o una cadena, tiene que estar en 1 línea.

+2

+1 para mover el modificador 'i' al final. JavaScript no admite la sintaxis del modificador en línea ('(? I)') que utilizó Gruber. –

+0

@AlanMoore: Je, no pensé en eso cuando lo escribí. Simplemente lo moví hasta el final, porque es javascript, así que eso es "donde pertenece, maldición". Por supuesto, tienes razón en que esa es la razón, pero lo hice como un reflejo :) – Flambino

0

pon toda la expresión en una línea, y elimina las comillas al principio y al final para que parezca var patt = /the-long-patttern/;, netbeans seguirá quejándose, pero los navegadores no lo harán y eso es lo que importa.

+0

Esto no fue suficiente para hacerlo funcionar. Flambino lo hizo bien. – jfriend00

0

Usted debe escribir así en NetBeans:

 "(?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`!()\\[\\]{};:'\".,<>?«»“”‘’]))"; 
Cuestiones relacionadas