el problema del guion es que tienes que escaparlo con backslash porque dentro de la clase tiene un significado especial. hace un tiempo habia escrito una expresion para detectar URLs, esperamos que te funcione.
Código:
/(\w+:)?(?:\/+)?([^\/]*)([^?#]*)(\?[^#]+)?(#\w+)?/
la expresion la habia escrito pensado en separar los varios componentes: protocolo, dominio, ruta, query, y hash.
edit @ 22:03,
estoy leyendo un libro que no llevo ni 4 dias con el. les muestro otra expresion que nuestro amigo Douglas Crockford nos comparte en su libro JavaScript
: The Good Parts (ISBN: 978-0-596-51774-8). creo que es bastante parecida a la que antes mostre con la unica diferencia que Douglas se interesa mas por la informacion crucial de cada componente. en mi caso, yo lo trate de asimilar mas a la informacion que devuelve las propiedades del objeto
location. respiren profundo porque esta mucho mas largo
Código:
/^((?:[A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;