【问题标题】:Fix Javascript Invalid regular expression: Invalid Group [duplicate]修复 Javascript 无效的正则表达式:无效组 [重复]
【发布时间】:2013-12-02 00:29:03
【问题描述】:

我正在使用正则表达式来分隔 url 的元素:

http://domain.com/page/post#fragment?query

/(?:([\w\-\+]+(?<!domain\.com))\/?)?(?:([\w\-\+]+(?<!domain\.com))\/?)?(?:#([\w\-\+]+))?(?:\?([\w\-\+]+))?$/

以下是本次比赛的结果:

$1 = 页

$2 = 帖子

$3 = 片段

$4 = 查询

我收到此错误:

Invalid regular expression: /(?:([\w\-\+]+(?<!localhost))\/?)?(?:([\w\-\+]+(?<!localhost))\/?)?(?:#([\w\-\+]+))?(?:\?([\w\-\+]+))?$/: Invalid group

【问题讨论】:

标签: javascript regex url match


【解决方案1】:

这部分:(?&lt;!domain\.com)) 是问题,因为 Javascript 不支持 lookbehind

【讨论】:

【解决方案2】:

您可以根据自己的需要进行调整,它会捕获 URL 的大部分不同部分:

^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$

小提琴:http://www.rexfiddle.net/m1ERMlZ

注意:这不适用于由换行符分隔的多个 URL,因此使用 gm 标志没有任何作用。


如果您只是想对 URL 进行标记(即分别从中提取不同的部分),请尝试以下简单方法:https://gist.github.com/jlong/2428561

【讨论】:

  • 在一个变量中捕获所有文件夹。我希望正则表达式能够将文件夹分成不同的变量。
  • 我不确定您是否可以使用 Javascript 正则表达式动态生成捕获组(例如,每个文件夹一个捕获组)。在某个复杂点上,Regex 不再有用并开始成为一种负担,因为您正试图迫使 Regex 做超出其能力范围的事情。例如,.NET 框架有自己的专用类用于解析、验证和处理 URI/URL。如果您只是想提取 URI 的各个部分,请尝试以下方法:gist.github.com/jlong/2428561。编辑了我的答案以包含此内容。
  • 比这要复杂一点...我用 htaccess 文件设置了一个错误的文件夹结构,这就是 htaccess 文件解释 url 的方式。我试图在解析 url 的所有各种文件类型中保持一致。
猜你喜欢
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2016-05-10
  • 2020-09-02
相关资源
最近更新 更多