diff --git a/lib/manager/regex/__snapshots__/index.spec.ts.snap b/lib/manager/regex/__snapshots__/index.spec.ts.snap
index 90ed65cf6ca0e0165f088ab3c338f1895af3e91b..2cbc5039f10181ae9d72d8588d70aa22c2a42416 100644
--- a/lib/manager/regex/__snapshots__/index.spec.ts.snap
+++ b/lib/manager/regex/__snapshots__/index.spec.ts.snap
@@ -73,3 +73,30 @@ Object {
   ],
 }
 `;
+
+exports[`manager/regex/index extracts registryUrl 1`] = `
+Object {
+  "deps": Array [
+    Object {
+      "currentValue": "8.12.13",
+      "datasource": "helm",
+      "depName": "prometheus-operator",
+      "registryUrls": Array [
+        "https://kubernetes-charts.storage.googleapis.com/",
+      ],
+      "replaceString": "chart:
+          repository: https://kubernetes-charts.storage.googleapis.com/
+          name: prometheus-operator
+          version: 8.12.13
+",
+    },
+  ],
+  "matchStrings": Array [
+    "chart:
+ *repository: (?<registryUrl>.*?)
+ *name: (?<depName>.*?)
+ *version: (?<currentValue>.*)
+",
+  ],
+}
+`;
diff --git a/lib/manager/regex/index.spec.ts b/lib/manager/regex/index.spec.ts
index eb70ef625e2abe27fd1047a6325667915507549e..39faae5dda9bfdb1512eec9b29cb81bec45a28de 100644
--- a/lib/manager/regex/index.spec.ts
+++ b/lib/manager/regex/index.spec.ts
@@ -60,4 +60,30 @@ describe(getName(__filename), () => {
     );
     expect(res).toBeNull();
   });
+  it('extracts registryUrl', async () => {
+    const config = {
+      matchStrings: [
+        'chart:\n *repository: (?<registryUrl>.*?)\n *name: (?<depName>.*?)\n *version: (?<currentValue>.*)\n',
+      ],
+      datasourceTemplate: 'helm',
+    };
+    const res = await extractPackageFile(
+      `
+      apiVersion: helm.fluxcd.io/v1
+      kind: HelmRelease
+      metadata:
+        name: prometheus-operator
+        namespace: monitoring
+      spec:
+        releaseName: prometheus-operator
+        chart:
+          repository: https://kubernetes-charts.storage.googleapis.com/
+          name: prometheus-operator
+          version: 8.12.13
+      `,
+      'Dockerfile',
+      config
+    );
+    expect(res).toMatchSnapshot();
+  });
 });
diff --git a/lib/manager/regex/index.ts b/lib/manager/regex/index.ts
index 8dc7133335d18146f92fab22dc6f4d68efbcc209..7eb28b8eec4382dd5515e2f5dd6d8dafdb943d71 100644
--- a/lib/manager/regex/index.ts
+++ b/lib/manager/regex/index.ts
@@ -1,3 +1,4 @@
+import url from 'url';
 import { logger } from '../../logger';
 import { regEx } from '../../util/regex';
 import * as template from '../../util/template';
@@ -27,6 +28,7 @@ export function extractPackageFile(
         'currentDigest',
         'datasource',
         'versioning',
+        'registryUrl',
       ];
       for (const field of fields) {
         const fieldTemplate = `${field}Template`;
@@ -45,6 +47,12 @@ export function extractPackageFile(
         }
       }
       dep.replaceString = String(matchResult[0]);
+      if (dep.registryUrl) {
+        if (url.parse(dep.registryUrl)) {
+          dep.registryUrls = [dep.registryUrl];
+        }
+        delete dep.registryUrl;
+      }
       deps.push(dep);
     }
   } while (matchResult);
diff --git a/lib/manager/regex/readme.md b/lib/manager/regex/readme.md
index 0847123d4d027681aa3432b800b2ee3724829e59..1e62bb9d002139da3de2f49e3b590f0076811503 100644
--- a/lib/manager/regex/readme.md
+++ b/lib/manager/regex/readme.md
@@ -23,6 +23,7 @@ Configuration-wise, it works like this:
 - You must have either a `datasource` capture group or a `datasourceTemplate` config field
 - You can optionally have a `versioning` capture group or a `versioningTemplate` config field. If neither are present, `semver` will be used as the default
 - You can optionally have a `currentDigest` capture group.
+- You can optionally have a `registryUrl` capture group. If it's a valid URL, it will be converted to the `registryUrls` field as a single-length array.
 
 ### Regular Expression Capture Groups