@imhonglu/pattern-builder
Version:
Type-safe regular expression pattern builder for TypeScript with fluent API
48 lines • 2.73 kB
JavaScript
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==