我发现了一个在这里寻找匹配网址的正则表达式:http://daringfireball.net/2010/07/improved_regex_for_matching_urls,正则表达式是:
(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
但是当我尝试在我的js文件中使用它时,firebug会向我显示语法错误:语法错误正好在这部分(?i)
我使用正则表达式如下:
text = $('textarea').val();
url_regex = (?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]));
match = url_regex.exec(text);
请问哪里有问题?
答案 0 :(得分:2)
在javascript中,正则表达式包含在/
中。此外,(?i)
部分最后需要用i
替换,以使正则表达式不区分大小写。
text = $('textarea').val();
url_regex=/\b((?:https?:\/\/|(www\d{0,3}[.])?|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i
match = url_regex.exec(text);
所以,正如其他人所说,javascript和perl中的正则表达式之间存在一些差异。
答案 1 :(得分:1)
正则表达式需要包含在正斜杠中,并且其中的所有正斜杠都需要使用反斜杠进行转义。 第二个(?i)是打开不区分大小写模式的标志我猜它是用于Perl但在Javascript中不支持同样的方式。
/\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))/
应该有效。此外,如果您想要打开不区分大小写的模式,您应该使用如下:
new RegExp('.*', 'i');