tpmjs/packages/tools/official/regex-extract
Ajax Davis 5c9f1a1d0a chore: update dependencies with compatibility fixes
- Update all packages to latest versions via pnpm update --latest
- Downgrade Prisma 7 to 6 (v7 requires schema migration)
- Downgrade Tailwind CSS 4 to 3 (v4 requires PostCSS migration)
- Downgrade Storybook 10 to 8 (addons not available in v10)
- Pin cheerio to 1.0.0-rc.12 via pnpm override (type exports changed)
- Fix AI SDK tool definitions: parameters -> inputSchema
- Fix cheerio types in extract-meta and table-extract tools
- Add explicit type annotations to tool execute functions
- Migrate biome config to v2.3.11 schema

All type-checks, tests, and builds pass.
2026-01-09 22:49:41 +10:00
..
src feat: add 100+ official TPMJS tools 2025-12-31 22:55:56 +10:00
CHANGELOG.md chore: version packages 2025-12-31 23:54:47 +10:00
package.json chore: update dependencies with compatibility fixes 2026-01-09 22:49:41 +10:00
README.md feat: add 100+ official TPMJS tools 2025-12-31 22:55:56 +10:00
tsconfig.json feat: add 100+ official TPMJS tools 2025-12-31 22:55:56 +10:00
tsup.config.ts feat: add 100+ official TPMJS tools 2025-12-31 22:55:56 +10:00

@tpmjs/official-regex-extract

Extract all regex matches from text with optional capture group support.

Installation

npm install @tpmjs/official-regex-extract

Usage

import { regexExtractTool } from '@tpmjs/official-regex-extract';
import { generateText } from 'ai';

const result = await generateText({
  model: yourModel,
  tools: {
    regexExtract: regexExtractTool,
  },
  prompt: 'Extract all email addresses from the text',
});

Parameters

  • text (string, required): The text to search for matches
  • pattern (string, required): Regular expression pattern (without delimiters)
  • flags (string, optional): Regular expression flags
    • g - global (automatically added if not present)
    • i - case-insensitive
    • m - multiline
    • s - dotAll (. matches newlines)
    • u - unicode
    • y - sticky
  • groups (boolean, optional): If true, return detailed match objects with capture groups and positions. Default: false

Returns

{
  matches: string[] | MatchWithGroups[];  // Array of matches
  matchCount: number;                     // Total number of matches
  hasMatches: boolean;                    // Whether any matches were found
}

// When groups=true, each match is:
{
  match: string;                          // The full matched text
  groups: Record<string, string>;         // Named capture groups
  index: number;                          // Position in text
}

Examples

Extract email addresses

const result = await regexExtractTool.execute({
  text: 'Contact us at support@example.com or sales@example.com',
  pattern: '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}',
  flags: 'i',
});
// {
//   matches: ['support@example.com', 'sales@example.com'],
//   matchCount: 2,
//   hasMatches: true
// }

Extract URLs with capture groups

const result = await regexExtractTool.execute({
  text: 'Visit https://example.com and http://test.org',
  pattern: '(?<protocol>https?)://(?<domain>[^\\s]+)',
  groups: true,
});
// {
//   matches: [
//     {
//       match: 'https://example.com',
//       groups: { protocol: 'https', domain: 'example.com' },
//       index: 6
//     },
//     {
//       match: 'http://test.org',
//       groups: { protocol: 'http', domain: 'test.org' },
//       index: 30
//     }
//   ],
//   matchCount: 2,
//   hasMatches: true
// }

Extract phone numbers

const result = await regexExtractTool.execute({
  text: 'Call (555) 123-4567 or (555) 987-6543',
  pattern: '\\(\\d{3}\\)\\s\\d{3}-\\d{4}',
});
// {
//   matches: ['(555) 123-4567', '(555) 987-6543'],
//   matchCount: 2,
//   hasMatches: true
// }

Extract hashtags (case-insensitive)

const result = await regexExtractTool.execute({
  text: 'Love #JavaScript and #TypeScript!',
  pattern: '#\\w+',
  flags: 'i',
});
// {
//   matches: ['#JavaScript', '#TypeScript'],
//   matchCount: 2,
//   hasMatches: true
// }

Extract dates with named groups

const result = await regexExtractTool.execute({
  text: 'Event on 2024-03-15 and deadline 2024-06-30',
  pattern: '(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})',
  groups: true,
});
// {
//   matches: [
//     {
//       match: '2024-03-15',
//       groups: { year: '2024', month: '03', day: '15' },
//       index: 9
//     },
//     {
//       match: '2024-06-30',
//       groups: { year: '2024', month: '06', day: '30' },
//       index: 33
//     }
//   ],
//   matchCount: 2,
//   hasMatches: true
// }

Use Cases

  • Extracting email addresses from text
  • Finding URLs in content
  • Parsing phone numbers
  • Extracting hashtags or mentions
  • Finding dates in various formats
  • Extracting code snippets or code blocks
  • Parsing structured data from text
  • Finding price values
  • Extracting IP addresses
  • Validating and extracting specific patterns

Tips

  • The g (global) flag is automatically added to find all matches
  • Use named capture groups (?<name>...) for clearer results when groups=true
  • Escape special regex characters: \ ^ $ . * + ? ( ) [ ] { } |
  • Use i flag for case-insensitive matching
  • Use m flag when matching across multiple lines with ^ and $

Error Handling

The tool throws an error if:

  • The pattern is invalid regex syntax
  • Text or pattern is not a string

License

MIT