diff --git a/src/acl.c b/src/acl.c
index b6e55ec..7dc25fb 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -543,11 +543,6 @@
 int acl_parse_reg(const char **text, struct acl_pattern *pattern, int *opaque, char **err)
 {
 	regex *preg;
-	int icase;
-#ifdef USE_PCRE_JIT
-	const char *error;
-	int erroffset;
-#endif
 
 	preg = calloc(1, sizeof(*preg));
 
@@ -556,32 +551,11 @@
 		return 0;
 	}
 
-#ifdef USE_PCRE_JIT
-	icase = (pattern->flags & ACL_PAT_F_IGNORE_CASE) ? PCRE_CASELESS : 0;
-	preg->reg = pcre_compile(*text, PCRE_NO_AUTO_CAPTURE | icase, &error, &erroffset,
-		NULL);
-	if (!preg->reg) {
+	if (!regex_comp(*text, preg, !(pattern->flags & ACL_PAT_F_IGNORE_CASE), 0, err)) {
 		free(preg);
-		memprintf(err, "regex '%s' is invalid (error=%s, erroffset=%d)", *text, error, erroffset);
 		return 0;
 	}
 
-	preg->extra = pcre_study(preg->reg, PCRE_STUDY_JIT_COMPILE, &error);
-	if (!preg->extra) {
-		pcre_free(preg->reg);
-		free(preg);
-		memprintf(err, "failed to compile regex '%s' (error=%s)", *text, error);
-		return 0;
-	}
-#else
-	icase = (pattern->flags & ACL_PAT_F_IGNORE_CASE) ? REG_ICASE : 0;
-	if (regcomp(preg, *text, REG_EXTENDED | REG_NOSUB | icase) != 0) {
-		free(preg);
-		memprintf(err, "regex '%s' is invalid", *text);
-		return 0;
-	}
-#endif
-
 	pattern->ptr.reg = preg;
 	pattern->freeptrbuf = &acl_free_reg;
 	return 1;
diff --git a/src/regex.c b/src/regex.c
index 1455fb4..a268996 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -122,7 +122,45 @@
 	return NULL;
 }
 
+int regex_comp(const char *str, regex *regex, int cs, int cap, char **err)
+{
+#ifdef USE_PCRE_JIT
+	int flags = 0;
+	const char *error;
+	int erroffset;
+
+	if (!cs)
+		flags |= PCRE_CASELESS;
+	if (!cap)
+		flags |= PCRE_NO_AUTO_CAPTURE;
+
+	regex->reg = pcre_compile(str, flags, &error, &erroffset, NULL);
+	if (!regex->reg) {
+		memprintf(err, "regex '%s' is invalid (error=%s, erroffset=%d)", str, error, erroffset);
+		return 0;
+	}
+
+	regex->extra = pcre_study(regex->reg, PCRE_STUDY_JIT_COMPILE, &error);
+	if (!regex->extra) {
+		pcre_free(regex->reg);
+		memprintf(err, "failed to compile regex '%s' (error=%s)", str, error);
+		return 0;
+	}
+#else
+	int flags = REG_EXTENDED;
+
+	if (!cs)
+		flags |= REG_ICASE;
+	if (!cap)
+		flags |= REG_NOSUB;
 
+	if (regcomp(regex, str, flags) != 0) {
+		memprintf(err, "regex '%s' is invalid", str);
+		return 0;
+	}
+#endif
+	return 1;
+}
 
 /*
  * Local variables:
