views:

31

answers:

2

I'm trying to search plain old strings for urls that begin with http, but all the regex I find doesn't seem to work in javascript nor can I seem to find an example of this in javascript.

This is the one I'm trying to use from here and here:

var test = /\b(?:(?:https?|ftp|file)://www\.|ftp\.)[-A-Z0-9+&@#/%=~_|$?!:,.]*[A-Z0-9+&@#/%=~_|$]/;

But when I try to run it, I get "Unexpected token |" errors.

A: 

You're using / as your regex delimiter, and are also using / within the regex (before www), so the regex actually terminates after the first / before www. Change it to:

var test = /\b(?:(?:https?|ftp|file):\/\/www\.|ftp\.)[-A-Z0-9+&@#/%=~_|$?!:,.]*[A-Z0-9+&@#/%=~_|$]/;
                                     ^^^^ escape here
Marc B
not only there, there are some '/' chars later too
pepkin88
forgot to mention, this regexp is case insensitive, so you would rather write this: `var test = /\b(?:(?:https?|ftp|file):\/\/www\.|ftp\.)[-A-Z0-9+`
pepkin88
+1  A: 

Ok, a comment seems to be not enough, hard to find full answer. I rewrite whole proper regexp: (tested, it works good)

var test = /\b(?:(?:https?|ftp|file):\/\/www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i;

The i on the end means 'ignore case', so it is necessary for this regexp.

pepkin88
Might be useful to note that adding a | before www will make the www optional.
AdamB