21 lines
677 B
JavaScript
21 lines
677 B
JavaScript
|
export function buildMatchPatternFn(args) {
|
||
|
return (string, options = {}) => {
|
||
|
const matchResult = string.match(args.matchPattern);
|
||
|
if (!matchResult) return null;
|
||
|
const matchedString = matchResult[0];
|
||
|
|
||
|
const parseResult = string.match(args.parsePattern);
|
||
|
if (!parseResult) return null;
|
||
|
let value = args.valueCallback
|
||
|
? args.valueCallback(parseResult[0])
|
||
|
: parseResult[0];
|
||
|
|
||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type
|
||
|
value = options.valueCallback ? options.valueCallback(value) : value;
|
||
|
|
||
|
const rest = string.slice(matchedString.length);
|
||
|
|
||
|
return { value, rest };
|
||
|
};
|
||
|
}
|