Like, as in "every constituent element individually accessible in its own named capture group?" Need it to be pre-optimized and fully ECMA-compliant? Want to see exhaustive unit tests proving these claims (144 are included; all 144 execute in 6.5ms. Total.)?
Then you just lucked out.
Fully breaks down a URL, acting the same (meaning the same capture group names apply regardless of use case; makes for MUCH easier interaction in ones code) on:
./
, .//
)/
)https://www.domain.com/
)https://domain.com/
)//domain.com/
)...with each separated out into HOST, PROTOCOL, DOMAIN, and RELATIVE path prefix.
It then further proceeds to break out (also into individually-named groups, but only when present):
/some/path/to/a/file/
)filename.ext
)
filename
).ext
)?query=string
)#SomeAnchor
)Best of all, EVERY ONE of these are delivered in named capture groups (so you're looking at obj.groups.DOMAIN instead of object[3])
Full Request: https://www.domain.com/some/path/to/a/file-with.ext?Plus=QueryString#AndAnchor
Host: https://www.domain.com/
Protocol: https://
Domain: www.domain.com/
Path: some/path/to/a/
FullFileName: file-with.ext
FileName: file-with
Extension: .ext
QueryString: ?Plus=QueryString
Anchor: #AndAnchor
Full Request: ../../../../some/path/to/a/file-with.ext?Plus=QueryString#AndAnchor
Relative: ../../../../
Path: some/path/to/a/
FullFileName: file-with.ext
FileName: file-with
Extension: .ext
QueryString: ?Plus=QueryString
Anchor: #AndAnchor