This ES2018+ Javascript RegExp expression should parse the components of any valid Docker image reference URI.
It captures:
This expression uses named capture groups and lookarounds, which are available from ES2018. Be sure to check compatibility! See here for a good reference: https://www.smashingmagazine.com/2019/02/regexp-features-regular-expressions/#compatibility-table
The expression itself is based on a literal transcription of the RegEx from the official Go implementation / spec: https://pkg.go.dev/github.com/docker/distribution/reference
There is one notable deviation here from the spec -- I have separated the 'Path' component into two parts -- 'Namespace' and 'Repo'.
This is helpful for registries which have container paths more than two levels deep (e.g. GitLab's.)
So, in the case of registry.xyz/myorg/mygroup/myproject:latest
, it would extract myorg/mygroup
as "namespace" and myproject
as "repo".
Hope this is helpful for someone!