【问题标题】:URL regex does not work in javascriptURL 正则表达式在 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\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]
{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|
(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|
(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:
'".,<>?«»“”‘’]))/";

有人知道怎么解决吗?

【问题讨论】:

标签: javascript regex url


【解决方案1】:

你应该在 NetBeans 中这样写:

      "(?i)\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]"
      + "+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))"
      + "+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))";

【讨论】:

    【解决方案2】:

    正如其他人所说,这是双引号。但或者,您可以将正则表达式写为 javascript 中的文字(但随后您需要转义第 1 行和第 3 行中的正斜杠)。

    var regexp = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,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】:

    将整个表达式放在一行中,并删除开头和结尾的引号,使其看起来像这样var patt = /the-long-patttern/;,netbeans 仍然会抱怨,但浏览器不会,这很重要。

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多