code: function getMatchedList(dataList, regex) {
    if (isObject(dataList)) {
      if (isArray(dataList)) {
        return dataList.map(function(v) {
          return v.match(regex);
        });
      }
      else {
        /*
         * Example dataList:
         *
         * data: [{a: 10, b: 'dude', c:'omg'}, {a: 10, b: 'dude man', c: 'omg what?!'}]
         * searchInProps: ['b', 'c']
         */
        var tempDataList = clone(dataList);
  
        tempDataList.data = tempDataList.data.map(function(obj) {
          var temp = clone(obj);
          var keysWithMatchesCount = 0;
  
          keysWithMatchesCount = dataList.searchInProps.filter(function(prop) {
            //hidden side-effect T_T
            //move on functional boys
            if (isString(obj[prop])) temp[prop] = obj[prop].match(regex);
            else throw new SyntaxError(messages.OnlyStringsAreSearchable);
            return !!temp[prop];
          }).length;
  
          /*
           * If an element has no matches in any keys then return null
           * in its place, effectively removing that element from the
           * final list.
           */
          if (keysWithMatchesCount > 0) return temp;
          else return null;
        });
        return tempDataList;
      }
    }
    else throw new SyntaxError(messages.DataMustBeArrayOrObject);
  }
docs: /*
  getMatchedList :: Object -> RegExp -> Object
   
  Returns a list of strings that match the input
  search string.
  @param  {Array}  dataList List of strings to search in
  @param  {RegExp} regex    Regular expression to match against individual strings
  @return {Array}           List of items that match input search pattern based regexp