Generate Regular Expression based on an input array

by BramVanroy

HTML

<h1>
Generate Regular Expression based on an input array
</h1>

<p>
  In this example the input is <code>[0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19, 20, 21, 105, 106, 107, 256, 257, 258, 259, 260]</code>. The result is:
</p>
<p class="result"><code></code></p>

JavaScript

var arr = [0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19, 20, 21, 105, 106, 107, 256, 257, 258, 259, 260],
  onesArray = [],
  tensArray = [],
  tensMultiArray = {},
  hundredsArray = [],
  hundredsMultiArray = {};

// MAIN
function regexGenerator(arr) {
  orderSplitter(arr);

  var onesRegexString = onesToRegex(onesArray);
  var tensRegexString = tensToRegex(tensArray);
  var hundredsRegexString = hundredsToRegex(hundredsArray);

  // Don't forget start/end points ^$
  var regex = "(^(" + onesRegexString + ")$)|(^(" + tensRegexString + ")$)|(^(" + hundredsRegexString + ")$)";

  $(".result code").text(regex);
}

regexGenerator(arr);

// Split input array in ones (1 digit), tens (2 digits), hundreds (3 digits)
// Can be extended to include others
function orderSplitter(numberArray) {
  $(numberArray).each(function(index, element) {
    if (element < 10) {
      onesArray.push(element);
    } else if (element < 100 && element > 9) {
      tensArray.push(element);
    } else if (element < 1000 && element > 99) {
      hundredsArray.push(element);
    }
  });
}

/* Following functions expect an array as input */
function onesToRegex(ones) {
  var onesRegex = "";
  for (var i = 0; i < ones.length; i++) {
    var e = ones[i];
    // If this element is not the first element, and it is equal to
    // the previous number + 1
    if (i > 0 && e == (ones[i - 1] + 1)) {
      // If this element is NOT equal to the next element - 1
      // Will also return true if next item does not exist
      if (e != (ones[i + 1] - 1)) {
        onesRegex += e + "]";
      }
    }
    // If this item is a (new) first item in a list
    else {
      if (onesRegex != "") onesRegex += "|";
      onesRegex += "[" + e + "-";
    }
  }
  return onesRegex;
}

function tensToRegex(tens) {
  var tensRegex = "";

  // Loop the array and break the number down in digits
  // E.g. 13 -> ten = 1; one = 3
  $(tens).each(function(index, element) {
    var ten = Math.floor(element / 10),
     ...