【问题标题】:SyntaxError in a regex正则表达式中的语法错误
【发布时间】:2013-11-16 03:36:18
【问题描述】:

我在这里找到了一个寻找匹配网址的正则表达式: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 文件中使用它时,萤火虫显示了 SyntaxError: syntax error just in this part (?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);

请问哪里有问题?

【问题讨论】:

  • 你是把那行直接复制粘贴到你的js中,还是周围有更多的代码?
  • stackoverflow.com/questions/15145659/… 解释 (?i) 关闭区分大小写 (?-1) 重新开启区分大小写。
  • 我更新我的问题,我复制并粘贴该行而不修改,然后将其分配给 url_regex 变量
  • 您需要在模式中添加分隔符。将其包裹在 / 字符中以告诉 Javascript 它是一个正则表达式。
  • 你的正则表达式需要被/../围起来——见developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

标签: javascript


【解决方案1】:

在 javascript 中,正则表达式被包裹在 /s 中。此外,(?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 中的正则表达式之间存在一些差异。

【讨论】:

  • 谢谢@SuperScript,它现在可以工作了:)只有一个问题,我可以将“www”设为可选吗?
  • 当我复制过去时,您的评论代码中有一些错误!如果我明白我只需要更改这部分:(www\d{0,3}[.])? , 但是没有 www 就不行
  • 我已将其编辑到我的答案中。只需在那里重新复制正则表达式。
  • 现在有了这个修改,它可以在没有 www 的情况下工作,但是如果我在 url 之前放一些文本它不起作用!在更改之前它甚至可以首先使用文本
【解决方案2】:

正则表达式需要用正斜杠包裹,其中的所有正斜杠都需要用反斜杠转义。 第二个 (?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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2012-11-10
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多