正则表达式中的SyntaxError

时间:2013-11-16 03:36:18

标签: javascript

我发现了一个在这里寻找匹配网址的正则表达式: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);

请问哪里有问题?

2 个答案:

答案 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');