正则表达式 URL 捕获组

Regex URL Capturing Group

我正在编写一个正则表达式并尝试将 URL 的每个部分放入它自己的捕获组中以进行提取:

示例 URLs:

http://domain.com/path1/to/file.js
http://domain.com/path-dash/to-dash/file.js
http://domain.com/path-dash/to-dash/file-name.js
https://sub.domain.com/path/to/file.js
http://sub.domain-dash.net/path/to/file.js
http://sub-dash.domain.com/path/to/file.js
http://sub-dash.domain-dash.com/path/to/file.js

我目前拥有的:

/(https?):\/\/(\w+[\-]?\w+)?.?(\w+[\-]?\w+)?/gm

期望输出:

问题: 我怎样才能在我列出的所有示例中将每个 URL 部分放入它自己的 捕获组 以上?

您可以使用https://regex101.com/查看组号。

如果你确实关心数字,你总是可以使用“非捕获组(?:)

(https?):\/\/(?:([\w-]+)\.)?([\w-]+)\.(\w+)((?:\/[\w-]+)*\/)([\w-]+)+\.([\w]+)

那样你确实会得到

第 1 组:协议

组 2. 子域

第 3 组域

组 4. 域扩展 (TLD)

第 5 组。/path/to/

组 6.文件名

第 7 组扩展


如果有额外的群组不打扰你,那么

/(https?):\/\/(([\w-]+)\.)?([\w-]+)\.(\w+)((\/[\w-]+)*\/)([\w-]+)+\.([\w]+)/

你会得到

第 1 组:协议

组 3. 子域

组 4.域

第 5 组。顶级域(或如您所说的域扩展)

第 6 组。/path/to/

组 8.文件名

第 9 组扩展