Fixtures that can't drift from the validator.

Hand-written fixtures rot the moment the pattern changes. Generate the strings from the pattern itself: distinct, deterministic, paginated. Test data and validator can never disagree.

Run it on your patterns.

Each card calls the real API. Edit the patterns and compute. No signup.

Fixtures from the format you already wroteOPEN IN LIVE DEMO →
A =
strings(A, limit: , offset: )
STRINGS["beta-0000", "beta-0001", "beta-0002", "beta-0003", "beta-0004"]
Same order every run: page with offsetOPEN IN LIVE DEMO →
A =
strings(A, limit: , offset: )
STRINGS["abcde", "abcabc"]
Only strings inside a length window
A =(ab|cde)*
strings(A, limit: 5, minLength: 4, maxLength: 6)
STRINGS["abab", "cdeab", "abcde", "ababab", "cdecde"]
OperationNotationAnswersReturns
strings{s ∈ A}Distinct strings the pattern matches, paginated by limit/offset.string[]

Parameters

ParameterValuesMeaning
limit1 to 100Maximum number of distinct strings to return in the call.
offsetintegerStrings to skip before collecting, which is how you paginate.
minLengthintegerLower bound of the length window; excluded strings never consume offset positions.
maxLengthintegerUpper bound of the length window.
pathOrdersweep · interleave · shuffledWhich paths of the language are expanded first.
characterOrderascending · shuffledHow each position is filled from its character range.
seedintegerDraws both shuffled orders, so a shuffled run stays reproducible.
charsetcharacter classRestricts generation to a character class such as [a-z]; paths needing anything else are dropped.

The whole group, in code.

Every operation above through the official client. The API is plain REST underneath, so any HTTP client works too.

import { RegexSolverClient, Term } from 'regexsolver';

const client = new RegexSolverClient({ apiToken: 'REGEXSOLVER_API_TOKEN' });
const term = Term.regex("(alpha|beta|prod)-[a-z0-9]{4}");

// Distinct fixtures straight from the format you already wrote
await client.generateStrings(term, 5, 0);
// ["beta-0000", "beta-0001", "beta-0002", "beta-0003", "beta-0004"]

// Deterministic order: offset pages through the language without duplicates
await client.generateStrings(term, 5, 5);

// Only strings inside a length window; excluded ones never consume offset
await client.generateStrings(Term.regex("(ab|cde)*"), 5, 0, { minLength: 4, maxLength: 6 });
// ["abab", "cdeab", "abcde", "ababab", "cdecde"]

// Keep output printable when the pattern allows all of Unicode
await client.generateStrings(Term.regex("[a-z]{3}"), 5, 0, { charset: "[a-c]" });

// Realistic-looking data, still reproducible: same seed, same strings
await client.generateStrings(term, 5, 0, {
  pathOrder: "shuffled", characterOrder: "shuffled", seed: 42,
});