function parseClassname(name, arr, config, index = null) {
  const leadingRe = new RegExp('^(?<leading>\\s*)');
  const trailingRe = new RegExp('(?<trailing>\\s*)$');
  let leading = '';
  let core = '';
  let trailing = '';
  const leadingRes = leadingRe.exec(name);
  if (leadingRes && leadingRes.groups) {
    leading = leadingRes.groups.leading || '';
  }
  const trailingRes = trailingRe.exec(name);
  if (trailingRes && trailingRes.groups) {
    trailing = trailingRes.groups.trailing || '';
  }
  core = name.substring(leading.length, name.length - trailing.length);
  const variants = getPrefix(core, config.separator);
  const classSuffix = getSuffix(core, config.separator);
  let slot = null;
  arr.forEach((group) => {
    if (slot === null) {
      const found = findInGroup(classSuffix, group, config);
      if (found) {
        slot = found;
      }
    }
  });
  const value = slot ? slot.value : '';
  const isNegative = value[0] === '-';
  const off = isNegative ? 1 : 0;
  const body = core.substr(0, core.length - value.length + off).substr(variants.length + off);
  return {
    index: index,
    name: core,
    variants: variants,
    parentType: slot ? slot.group : '',
    body: body,
    value: value,
    shorthand: slot && slot.shorthand ? slot.shorthand : '',
    leading: leading,
    trailing: trailing,
    important: body.substr(0, 1) === '!',
  };
}
Returns an object with parsed properties

@param {String} name Classname to be parsed
@param {Array} arr The flatten array containing the regex
@param {Object} config The Tailwind CSS config
@param {Number} index The index
@returns {Object} Parsed infos