UNPKG

@imhonglu/pattern-builder

Version:

Type-safe regular expression pattern builder for TypeScript with fluent API

48 lines 2.73 kB
import { Characters } from "../pattern-builder/characters.js"; import { extractPatternSource } from "../utils/extract-pattern-source.js"; function isCharacterSet(source) { return source.startsWith("[") && source.endsWith("]"); } /** * Creates a pattern builder for the character set operator. * * @param patterns - The patterns to create the character set operator from. * @returns The pattern builder. * * @example pre-defined pattern with string * ```ts * characterSet(alpha, '#!'); * // => /[a-zA-Z#!]/ * ``` * * @example pre-defined pattern with pattern * ```ts * characterSet(digit, /[a-fA-F]/); * // => /[\da-fA-F]/ * ``` * * @example only string * ```ts * characterSet("a", "b", "c"); * // => /[abc]/ * ``` */ export function characterSet(...patterns) { const source = patterns .map((pattern) => { const source = extractPatternSource(pattern); if (isCharacterSet(source)) { return source.slice(1, -1); } return source; }) .join(""); return new Characters(`[${source}]`); } /** The pre-defined digit pattern. */ export const digit = characterSet(/0-9/); /** The pre-defined alpha pattern. */ export const alpha = characterSet(/a-z/, /A-Z/); /** The pre-defined hex digit pattern. */ export const hexDigit = characterSet(digit, /a-f/, /A-F/); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcmFjdGVyLXNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXR0ZXJuLWZ1bmN0aW9ucy9jaGFyYWN0ZXItc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUxRSxTQUFTLGNBQWMsQ0FBQyxNQUFjO0lBQ3BDLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQUcsUUFBd0I7SUFDdEQsTUFBTSxNQUFNLEdBQUcsUUFBUTtTQUNwQixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNmLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdDLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFWixPQUFPLElBQUksVUFBVSxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFekMscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRWhELHlDQUF5QztBQUN6QyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMifQ==