import { ParseRangeResult } from '../interfaces/option-parser'; /** * Options parser for custom tag */ export class OptionParser { /** * Parse range expression * * * * @see https://regex101.com/r/w4KCwC/4 * * @static * @param {string} str * @returns {ParseRangeResult} */ static parseRange(str: string): ParseRangeResult | null { if (str == null) { return null; } // see: https://regex101.com/r/w4KCwC/4 const match = str.match(/^(-?[0-9]+)(([:+]{1})(-?[0-9]+)?)?$/); if (!match) { return null; } // determine start let start; let end; // has operator if (match[3] != null) { start = +match[1]; const operator = match[3]; // determine end if (operator === ':') { end = +match[4] || -1; // set last(-1) if undefined } else if (operator === '+') { end = +match[4] || 0; // plus zero if undefined end += start; } } // don't have operator else { start = 1; end = +match[1]; } return { start, end }; } }