URL 正则表达式在 javascript 中不起作用
Posted
技术标签:
【中文标题】URL 正则表达式在 javascript 中不起作用【英文标题】:URL regex does not work in javascript 【发布时间】:2011-10-19 03:42:55 【问题描述】:我正在尝试在 javascript 中使用 John Gruber's URL regex,但 NetBeans 一直告诉我存在语法错误和非法错误:
var patt = "/(?i)\b((?:[a-z][\w-]+:(?:/1,3|[a-z0-9%])
|www\d0,3[.]|[a-z0-9.\-]+[.][a-z]
2,4/)(?:[^\s()<>]+|\(([^\s()<>]+|
(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|
(\([^\s()<>]+\)))*\)|[^\s`!()\[\];:
'".,<>?«»“”‘’]))/";
有人知道怎么解决吗?
【问题讨论】:
我认为您还需要提供有关表达式应该做什么(意味着)的信息,这样更容易检查。 @Issun:就是这个模式:daringfireball.net/2010/07/improved_regex_for_matching_urls 此正则表达式不适用于不以 www 开头的网站 【参考方案1】:将整个表达式放在一行中,并删除开头和结尾的引号,使其看起来像这样var patt = /the-long-patttern/;
,netbeans 仍然会抱怨,但浏览器不会,这很重要。
【讨论】:
【参考方案2】:正如其他人所说,这是双引号。但或者,您可以将正则表达式写为 javascript 中的文字(但随后您需要转义第 1 行和第 3 行中的正斜杠)。
var regexp = /\b((?:[a-z][\w-]+:(?:\/1,3|[a-z0-9%])|www\d0,3[.]|[a-z0-9.\-]+[.][a-z]2,4\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\];:'".,<>?«»“”‘’]))/i;
我还将不区分大小写的修饰符移到了末尾。只是因为。 (编辑:嗯,不仅仅是“因为”——请参阅下面 Alan Moore 的评论)
注意:无论您使用文字还是字符串,都必须在 1 行。
【讨论】:
+1 用于将i
修饰符移动到末尾。 JavaScript 不支持 Gruber 使用的内联修饰符语法 ((?i)
)。
@AlanMoore:嘿,我写的时候并没有真正考虑到这一点。我只是把它移到最后,因为它是 javascript,所以那是“它所属的地方,该死的!”。当然,你是对的,这就是原因,但我只是作为一种反射:)【参考方案3】:
你应该在 NetBeans 中这样写:
"(?i)\\b((?:[a-z][\\w-]+:(?:\\/1,3|[a-z0-9%])|www\\d0,3[.]|[a-z0-9.\\-]"
+ "+[.][a-z]2,4\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))"
+ "+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\];:'\".,<>?«»“”‘’]))";
【讨论】:
以上是关于URL 正则表达式在 javascript 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 正则表达式(负)后视在 Firefox 中不起作用
为啥加号运算符在 JavaScript 的正则表达式中不起作用? [复制]