Regex Builder & Explainer
Prerequisites & Dependencies
- Node.js 18+ with npm or pnpm
- Mandatory packages:
npm i regexp-score (for regex quality scoring) or built-in RegExp methods
- A code editor with regex support (VS Code, IntelliJ, Vim)
- Optional:
npm iregex-gen for generative regex creation (experimental)
Execution Steps
- Clearly define the pattern requirement: list the characters, digits, delimiters, quantifiers, and edge cases the regex must match
- Break the pattern into segments: anchors (start
^, end $), character classes, quantifiers, groups, and alternations
- Construct the regex incrementally, testing each segment with sample inputs before compositing
- Use online testers or Node REPL to validate:
const re = /pattern/; re.test('input')
- Add flags appropriately:
i (case-insensitive), g (global), m (multiline), s (dotall)
- Document the regex with inline comments using the
(?#comment) syntax or /** @type {RegExp} */ JSDoc
- Export or share the final regex: as a string constant, a RegExp object, or a code snippet in your docs
// Example: Regex to validate a strong password
// Requirements: 8+ characters, at least 1 uppercase, 1 lowercase, 1 digit, 1 special char
const strongPasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$;
// Test cases
const tests = [
{ input: 'Weak123', expected: false, desc: 'no uppercase, only 1 special' },
{ input: 'StrongPass!', expected: true, desc: 'meets all criteria' },
{ input: 'strongpass!', expected: false, desc: 'missing uppercase' },
{ input: 'StrongPass', expected: false, desc: 'missing digit' },
];
tests.forEach(({ input, expected, desc }) => {
const result = strongPasswordRegex.test(input);
console.log(
`${desc}: "${input}" → ${result} (expected ${expected}) ${result === expected ? '✅' : '❌'}`
);
});
# Test regex in Node REPL
node -e '
const re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$/;
console.log(re.test("StrongPass!")); // true
console.log(re.test("weak")); // false
'
`
# Final regex with comments for documentation
/^(?# anchor start)
(?=.*[a-z] # at least one lowercase letter
(?=.*[A-Z] # at least one uppercase letter
(?=.*\d # at least one digit
(?=.*[!@#$%^&*]) # at least one special char from set
[A-Za-z\d!@#$%^&*]{8,} # 8+ alphanumeric/special chars
$/x // free-spacing mode: ignores whitespace and allows comments
`
1---2name: regex-builder-explainer3description: Construct complex regular expressions based on pattern requirements with step-by-step logic breakdown.4metadata:5 source: skills/regex-builder-explainer/regex-builder-explainer.md6---78# Regex Builder & Explainer910## Prerequisites & Dependencies11- Node.js 18+ with npm or pnpm12- Mandatory packages: `npm i regexp-score` (for regex quality scoring) or built-in `RegExp` methods13- A code editor with regex support (VS Code, IntelliJ, Vim)14- Optional: `npm iregex-gen` for generative regex creation (experimental)1516## Execution Steps171. Clearly define the pattern requirement: list the characters, digits, delimiters, quantifiers, and edge cases the regex must match182. Break the pattern into segments: anchors (start `^`, end `$`), character classes, quantifiers, groups, and alternations193. Construct the regex incrementally, testing each segment with sample inputs before compositing204. Use online testers or Node REPL to validate: `const re = /pattern/; re.test('input')`215. Add flags appropriately: `i` (case-insensitive), `g` (global), `m` (multiline), `s` (dotall)226. Document the regex with inline comments using the `(?#comment)` syntax or `/** @type {RegExp} */` JSDoc237. Export or share the final regex: as a string constant, a RegExp object, or a code snippet in your docs2425```javascript26// Example: Regex to validate a strong password27// Requirements: 8+ characters, at least 1 uppercase, 1 lowercase, 1 digit, 1 special char28const strongPasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$;2930// Test cases31const tests = [32 { input: 'Weak123', expected: false, desc: 'no uppercase, only 1 special' },33 { input: 'StrongPass!', expected: true, desc: 'meets all criteria' },34 { input: 'strongpass!', expected: false, desc: 'missing uppercase' },35 { input: 'StrongPass', expected: false, desc: 'missing digit' },36];3738tests.forEach(({ input, expected, desc }) => {39 const result = strongPasswordRegex.test(input);40 console.log(41 `${desc}: "${input}" → ${result} (expected ${expected}) ${result === expected ? '✅' : '❌'}`42 );43});44```4546```bash47# Test regex in Node REPL48node -e '49const re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$/;50console.log(re.test("StrongPass!")); // true51console.log(re.test("weak")); // false52'53`54```5556```regex57# Final regex with comments for documentation58/^(?# anchor start)59 (?=.*[a-z] # at least one lowercase letter60 (?=.*[A-Z] # at least one uppercase letter61 (?=.*\d # at least one digit62 (?=.*[!@#$%^&*]) # at least one special char from set63 [A-Za-z\d!@#$%^&*]{8,} # 8+ alphanumeric/special chars64$/x // free-spacing mode: ignores whitespace and allows comments65`66```