我正在编写一个正则表达式,并尝试将URL的每个部分放入其自己的捕获组中进行提取:
示例网址
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
期望输出:
问题:如何在上面列出的所有示例中将每个网址放入其自己的捕获组?
答案 0 :(得分:2)
您可以使用https://regex101.com/检查组号。
如果您 DO 关心这些数字,您可以随时使用“非捕获组(?:)
(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组扩展