diff --git a/app.js b/app.js
index 37dd7be0eeb8cc5192a232ec9b33827906a49b94..fb064477abb8bd4e5604f51dae3524c11e88603e 100644
--- a/app.js
+++ b/app.js
@@ -113,6 +113,12 @@ var firmwarewizard = function() {
   var reRemoveSpaces = new RegExp(/ /g);
   var reStripDashes = new RegExp(/^\-+|\-+$/g);
 
+  if (config.version_regex === undefined) {
+    console.log("config.version_regex missing in config.js");
+    return;
+  }
+  var reVersionRegex = new RegExp(config.version_regex);
+
   function buildVendorModelsReverse() {
     var vendormodels_reverse = {};
 
@@ -281,7 +287,7 @@ var firmwarewizard = function() {
 
   function findVersion(name) {
     // version with optional date in it (e.g. 0.8.0~20160502)
-    var m = /-([0-9]+.[0-9]+.[0-9]+([+-][0-9]+)?(~[a-z0-9]+)?)[.-]/.exec(name);
+    var m = reVersionRegex.exec(name);
     return m ? m[1] : '';
   }
 
diff --git a/config_template.js b/config_template.js
index 444dccf9d7c31ccbfc82c9adbf3a9a400e46d429..f969b211ff55eefb6b772f2fa43af03a3de25bc0 100644
--- a/config_template.js
+++ b/config_template.js
@@ -20,6 +20,8 @@ var config = {
   vendormodels: vendormodels,
   // community prefix of the firmware images
   community_prefix: 'gluon-ffda-',
+  // firmware version regex
+  version_regex: '-([0-9]+.[0-9]+.[0-9]+([+-~][0-9]+)?)[.-]',
   // relative image paths and branch
   directories: {
     // some demo sources