ts-regex-builder
Version:
Maintainable regular expressions for TypeScript and JavaScript.
32 lines • 1.02 kB
JavaScript
import { encode } from "./encoder.mjs";
export function buildRegExp(sequence, flags) {
const pattern = encode(sequence).pattern;
ensureUnicodeFlagIfNeeded(pattern, flags);
const flagsString = encodeFlags(flags ?? {});
return new RegExp(pattern, flagsString);
}
export function buildPattern(sequence) {
return encode(sequence).pattern;
}
function encodeFlags(flags) {
let result = '';
if (flags.global) result += 'g';
if (flags.ignoreCase) result += 'i';
if (flags.multiline) result += 'm';
if (flags.hasIndices) result += 'd';
if (flags.dotAll) result += 's';
if (flags.sticky) result += 'y';
if (flags.unicode) result += 'u';
return result;
}
const unicodeModePatterns = /(?<!\\)(?:\\u|\\[pP])\{.+?\}/;
function ensureUnicodeFlagIfNeeded(pattern, flags) {
if (flags?.unicode) {
return;
}
const match = pattern.match(unicodeModePatterns);
if (match) {
throw new Error(`Pattern "${match?.[0]}" requires "unicode" flag to be set.`);
}
}
//# sourceMappingURL=builders.mjs.map