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 的正则表达式中不起作用? [复制]

正则表达式在 bs4 中不起作用

为啥 `\d` 在 sed 的正则表达式中不起作用? [复制]

工作正则表达式在 laravel 验证中不起作用

我的正则表达式在 C# 中不起作用