Skip to content

Commit 3291334

Browse files
committed
updated "latest release" alt text
1 parent 9ca541f commit 3291334

File tree

1 file changed

+132
-132
lines changed

1 file changed

+132
-132
lines changed

README.md

Lines changed: 132 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -1,132 +1,132 @@
1-
# ts-regexp
2-
[![npm version](https://img.shields.io/npm/v/ts-regexp.svg)](https://www.npmjs.com/package/ts-regexp)
3-
[![bundle size](https://img.shields.io/bundlejs/size/ts-regexp)](https://www.npmjs.com/package/ts-regexp)
4-
[![npm monthly downloads](https://img.shields.io/npm/dm/ts-regexp.svg)](https://www.npmjs.com/package/ts-regexp)
5-
[![typescript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
6-
[![license: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7-
[![github stars](https://img.shields.io/github/stars/codpro2005/ts-regexp.svg?style=social)](https://github.com/codpro2005/ts-regexp)
8-
9-
A RegExp wrapper providing stronger type safety.
10-
11-
```ts
12-
const groups1 = new RegExp('^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$', 'g').exec('9999-12-31')!.groups;
13-
// ⤴ '{ [key: string]: string; } | undefined' 🤮
14-
const groups2 = typedRegExp('^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$', 'g').exec('9999-12-31')!.groups;
15-
// ⤴ '{ year: string, month: string, day: string }' 🥰
16-
```
17-
[▶ Try it in the TypeScript Playground](https://www.typescriptlang.org/play/?#code/JYWwDg9gTgLgBAbzjAnmApgEwEroOYCiAHmHAL5wBmUEIcA5DAM4C0U+6J9A3AFC8B6AXABCAQybAAxnACuTMXnS8pEAHZN4qDJgAiYmOgAKBw1DVwAvMjRZchEgAp6APUcB+ADwp0YqAD4AHUDMBAAWMgBKFg9PEHUYAAsgkIQAJiiYr0wxFBTQjMiAEnoAGgY8eki+VQ14TnQpXCYrGx19QxMYMzUAOgapZzSABlGWAEZhljSwqoBCXrwaWTAmPiE4TbgXdxV1TTh2MAAbMSl0ZtbtLA7jU3RzXqPT84BJNSHRqcnp2fLHEAGKSJco+PzleJqJLlHIocoQSiUJjoGDlTRQYBqPDlJYQFZMSJWfxwAAGRQQuPxvVhZF65Mpq16kKStPpy0ZYKgZBJkTm62EW0FQuFItFYvFEslUolO34GwAwglODBZGJjnAxAB3PzoNToJhMQQCuC4GBiTEtVRQdhSeAQMAwYDqNXAVBwABGEiwcHUcCYqgwezqPodTrUaoAiqqoa6UABxdktazXHD4YhgZxuLwAR2jjtQ+QA1LFZGpXf4ANpiFgALwAuoXIpF3CVIkygYl3p9hmAiPNFom+PbHc7jlGxDHUAm8YzS67+dKRbLgJQ4I5h2HI3nY9OqbmJ-mUISELxBRvR+PJ-HE705zBuHANq9V-ur3BgC08MAAG668piOQy3gEB5Hgd10DgMAaG-YBMG9CQ4E1dBjmOXpTy2DZFyFWUyDlY0AEFjiYCBEOgABrFpNVdRINWOHoDDDIMDkxMBZHgZNbFTBwM1cWJDCIGBK2retGwAH1iV9DyLEsgKE2sGybVt2xgYEu3oEYez7XkBxnNZeBYtjbyAo1BWXVdHAMmBen49jLGsUs4MoTEsGPdDNksoz50fYRn3fNRWPgD81EYDVkGVcpXTgECDkBFSaMk2NEMSaQaMxKRjlkOCWgAu80MFTDNhwvC4AAZTESh8FVKBMENAqCH9MQwExPA4AAMjgeVEj8M4zHlU4DTgLq1EwY5mt4FN7HTZxglicMQCwFJIiqZTVI+ehPDmhalu0hk9IKrCDqlWUJrTJx6FiJyoE0fJImCcSvGRWpMDk+ttpWzs1rCUSxH7XaF0OgHAdM3YTu45wKwu4ArsE27AjrWJHvUZ7IjrftYtW5x-F+wcTKBvGZV2XG4CMGgMFgFA4E4D9DDUc4TIAAWYFhOAwW1metaAAC4GHRxJCOOd56DgQsGGeM50H5wW4EwdQQqpg5JFpiC1BI+hKioU48F4CtQam+gwHucxlt5yW1HKXWzoN7oHmCtsxfOU26z4C2eKtnoygqY2O1NvgGaZlnGhgdmaCgbn6ExTBpH1IWZf1YL6iIam-TS5XVcwIXKE18bOMmy3Ddt-oiEaZx+wjqO9Jd5w3Ztj36HTtsBhL7Sy-OPSiYAMU1uBvxdSPUD91gA7Zh4Q+5o5fEMTANcUbOdFz1389rr9KmqAfmZIQPg65hhZCFicp-ob8M81y0JxVsCINUEB3WczBZ7sU6F+to3yjV2Qj9Xkz8MwPvN3VUazBqj8pQaAsVGK1AOJwMQ4Bjh3GfhYDic9H7OBACgLo7tX5fnrnwKBMC4E9F6MRWQUBzj-QJrwXBJx8E216JnRQe1jTillHVROmhdTnB9KuOheBDSUNgegmhXUmDvEjq3HBRBoFUIEY8TQ0gyIoDIb0JRQA)
18-
## 🚀 Setup
19-
1. Install `ts-regexp`
20-
```shell
21-
# Using npm
22-
npm install ts-regexp
23-
24-
# Using yarn
25-
yarn add ts-regexp
26-
27-
# Using pnpm
28-
pnpm add ts-regexp
29-
```
30-
2. Import `typedRegExp`:
31-
```ts
32-
import { typedRegExp } from 'ts-regexp';
33-
```
34-
## 🧩 Usage
35-
36-
### Basic Usage
37-
38-
Import and use `typedRegExp` just like the native `RegExp` constructor:
39-
40-
```typescript
41-
import { typedRegExp } from 'ts-regexp';
42-
43-
const datePattern = typedRegExp('(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})');
44-
const emailPattern = typedRegExp('^(?<local>[a-z0-9._%+-]+)@(?<domain>[a-z0-9.-]+\.[a-z]{2,})$', 'i');
45-
```
46-
47-
The function signature is:
48-
```typescript
49-
typedRegExp(pattern: string, flags?: string)
50-
```
51-
> Note: `typedRegExp` returns a plain object, **not** a `RegExp` instance.
52-
53-
### Standard RegExp Methods
54-
55-
All standard `RegExp` methods work exactly as expected, but with equivalent or improved typing:
56-
57-
```typescript
58-
const pattern = typedRegExp('(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})', 'gid');
59-
60-
// Standard methods
61-
pattern.exec('1970-01-01')!.groups; // { year: string; month: string; day: string; }
62-
pattern.test('1970-01-01'); // boolean
63-
64-
// Access RegExp properties
65-
pattern.source; // "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})"
66-
pattern.flags; // "dgi"
67-
pattern.global; // true
68-
pattern.sticky; // false
69-
// ...
70-
```
71-
72-
### Regex-first Methods
73-
74-
Each `RegExp`-related `string.prototype` method is available as `${MethodName}In` with equivalent or improved typing:
75-
76-
```typescript
77-
const pattern = typedRegExp('(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})');
78-
const string = '1976-11-21';
79-
80-
// Instead of: string.match(pattern)
81-
const match = pattern.matchIn(string); // typed match
82-
83-
// Instead of: string.replace(pattern, replacement)
84-
const formatted1 = pattern.replaceIn(string, '$<day>/$<month>/$<year>');
85-
const formatted2 = pattern.replaceIn(string, (match, year, month, day, offset, string, groups) => `${groups.day}/${groups.month}/${groups.year}`); // typed arguments
86-
87-
// Other inversed methods
88-
pattern.searchIn(string); // like string.search(pattern)
89-
pattern.splitIn(string); // like string.split(pattern)
90-
```
91-
92-
### Global Flag Methods
93-
94-
When using the global (`g`) flag, additional methods become available:
95-
96-
```typescript
97-
const pattern = typedRegExp('\\d', 'g');
98-
99-
// Only available with 'g' flag
100-
pattern.matchAllIn('1973-12-08'); // like string.matchAll(pattern)
101-
pattern.replaceAllIn('123-456', '#'); // like string.replaceAll(pattern, replacement)
102-
```
103-
104-
### Advanced Usage
105-
106-
If you need access to the underlying `RegExp` instance:
107-
108-
```typescript
109-
const pattern = typedRegExp('\\d+');
110-
const nativeRegExp = pattern.regExp; // Regular RegExp instance
111-
```
112-
113-
## ✨ Features
114-
- ✅ Strictly typed named & unnamed capture groups
115-
- ✅ Supports contextual awareness
116-
- ✅ Parses:
117-
- nested groups
118-
- different group types (non-capturing, lookarounds, named captures, etc.)
119-
- alternation
120-
- character classes and escaped characters
121-
- ✅ Infers group optionality from quantifiers (`?`, `*`, `{n,m}`)
122-
- ✅ Validates flags
123-
- ✅ Supports dynamic (non-literal) pattern + flag inputs
124-
125-
126-
## 📘 API
127-
> 📋 **Planned**
128-
129-
For now, refer to [Examples](https://www.typescriptlang.org/play/?#code/JYWwDg9gTgLgBAbzjAnmApgEwEroOYCiAHmHAL5wBmUEIcA5DAM4C0U+6J9A3AFC8B6AXABCAQybAAxnACuTMXnS8pEAHZN4qDJgAiYmOgAKBw1DVwAvMjRZchEgAp6APUcB+ADwp0YqAD4AHUDMBAAWMgBKFg9PEHUYAAsgkIQAJiiYr0wxFBTQjMiAEnoAGgY8eki+VQ14TnQpXCYrGx19QxMYMzUAOgapZzSABlGWAEZhljSwqoBCXrwaWTAmPiE4TbgXdxV1TTh2MAAbMSl0ZtbtLA7jU3RzXqPT84BJNSHRqcnp2fLHEAGKSJco+PzleJqJLlHIocoQSiUJjoGDlTRQYBqPDlJYQFZMSJWfxwAAGRQQuPxvVhZF65Mpq16kKStPpy0ZYKgZBJkTm62EW0FQuFItFYvFEslUolO34GwAwglODBZGJjnAxAB3PzoNToJhMQQCuC4GBiTEtVRQdhSeAQMAwYDqNXAVBwABGEiwcHUcCYqgwezqPodTrUaoAiqqoa6UABxdktazXHD4YhgZxuLwAR2jjtQ+QA1LFZGpXf4ANpiFgALwAuoXIpF3CVIkygYl3p9hmAiPNFom+PbHc7jlGxDHUAm8YzS67+dKRbLgJQ4I5h2HI3nY9OqbmJ-mUISELxBRvR+PJ-HE705zBuHANq9V-ur3BgC08MAAG668piOQy3gEB5Hgd10DgMAaG-YBMG9CQ4E1dBjmOXpTy2DZFyFWUyDlY0AEFjiYCBEOgABrFpNVdRINWOHoDDDIMDkxMBZHgZNbFTBwM1cWJDCIGBK2retGwAH1iV9DyLEsgKE2sGybVt2xgYEu3oEYez7XkBxnNZeBYtjbyAo1BWXVdHAMmBen49jLGsUs4MoTEsGPdDNksoz50fYRn3fNRWPgD81EYDVkGVcpXTgECDkBFSaMk2NEMSaQaMxKRjlkOCWgAu80MFTDNhwvC4AAZTESh8FVKBMENAqCH9MQwExPA4AAMjgeVEj8M4zHlU4DTgLq1EwY5mt4FN7HTZxglicMQCwFJIiqZTVI+ehPDmhalu0hk9IKrCDqlWUJrTJx6FiJyoE0fJImCcSvGRWpMDk+ttpWzs1rCUSxH7XaF0OgHAdM3YTu45wKwu4ArsE27AjrWJHvUZ7IjrftYtW5x-F+wcTKBvGZV2XG4CMGgMFgFA4E4D9DDUc4TIAAWYFhOAwW1metaAAC4GHRxJCOOd56DgQsGGeM50H5wW4EwdQQqpg5JFpiC1BI+hKioU48F4CtQam+gwHucxlt5yW1HKXWzoN7oHmCtsxfOU26z4C2eKtnoygqY2O1NvgGaZlnGhgdmaCgbn6ExTBpH1IWZf1YL6iIam-TS5XVcwIXKE18bOMmy3Ddt-oiEaZx+wjqO9Jd5w3Ztj36HTtsBhL7Sy-OPSiYAMU1uBvxdSPUD91gA7Zh4Q+5o5fEMTANcUbOdFz1389rr9KmqAfmZIQPg65hhZCFicp-ob8M81y0JxVsCINUEB3WczBZ7sU6F+to3yjV2Qj9Xkz8MwPvN3VUazBqj8pQaAsVGK1AOJwMQ4Bjh3GfhYDic9H7OBACgLo7tX5fnrnwKBMC4E9F6MRWQUBzj-QJrwXBJx8E216JnRQe1jTillHVROmhdTnB9KuOheBDSUNgegmhXUmDvEjq3HBRBoFUIEY8TQ0gyIoDIb0JRQA) or [Usage](#-usage)
130-
## 📅 Project History
131-
[![latest release at 2025-08-24](https://img.shields.io/github/release-date-pre/codpro2005/ts-regexp)](https://github.com/codpro2005/ts-regexp/releases/latest)
132-
[![created at 2025-07-13](https://img.shields.io/github/created-at/codpro2005/ts-regexp)](https://github.com/codpro2005/ts-regexp/commits/main/)
1+
# ts-regexp
2+
[![npm version](https://img.shields.io/npm/v/ts-regexp.svg)](https://www.npmjs.com/package/ts-regexp)
3+
[![bundle size](https://img.shields.io/bundlejs/size/ts-regexp)](https://www.npmjs.com/package/ts-regexp)
4+
[![npm monthly downloads](https://img.shields.io/npm/dm/ts-regexp.svg)](https://www.npmjs.com/package/ts-regexp)
5+
[![typescript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
6+
[![license: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7+
[![github stars](https://img.shields.io/github/stars/codpro2005/ts-regexp.svg?style=social)](https://github.com/codpro2005/ts-regexp)
8+
9+
A RegExp wrapper providing stronger type safety.
10+
11+
```ts
12+
const groups1 = new RegExp('^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$', 'g').exec('9999-12-31')!.groups;
13+
// ⤴ '{ [key: string]: string; } | undefined' 🤮
14+
const groups2 = typedRegExp('^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$', 'g').exec('9999-12-31')!.groups;
15+
// ⤴ '{ year: string, month: string, day: string }' 🥰
16+
```
17+
[▶ Try it in the TypeScript Playground](https://www.typescriptlang.org/play/?#code/JYWwDg9gTgLgBAbzjAnmApgEwEroOYCiAHmHAL5wBmUEIcA5DAM4C0U+6J9A3AFC8B6AXABCAQybAAxnACuTMXnS8pEAHZN4qDJgAiYmOgAKBw1DVwAvMjRZchEgAp6APUcB+ADwp0YqAD4AHUDMBAAWMgBKFg9PEHUYAAsgkIQAJiiYr0wxFBTQjMiAEnoAGgY8eki+VQ14TnQpXCYrGx19QxMYMzUAOgapZzSABlGWAEZhljSwqoBCXrwaWTAmPiE4TbgXdxV1TTh2MAAbMSl0ZtbtLA7jU3RzXqPT84BJNSHRqcnp2fLHEAGKSJco+PzleJqJLlHIocoQSiUJjoGDlTRQYBqPDlJYQFZMSJWfxwAAGRQQuPxvVhZF65Mpq16kKStPpy0ZYKgZBJkTm62EW0FQuFItFYvFEslUolO34GwAwglODBZGJjnAxAB3PzoNToJhMQQCuC4GBiTEtVRQdhSeAQMAwYDqNXAVBwABGEiwcHUcCYqgwezqPodTrUaoAiqqoa6UABxdktazXHD4YhgZxuLwAR2jjtQ+QA1LFZGpXf4ANpiFgALwAuoXIpF3CVIkygYl3p9hmAiPNFom+PbHc7jlGxDHUAm8YzS67+dKRbLgJQ4I5h2HI3nY9OqbmJ-mUISELxBRvR+PJ-HE705zBuHANq9V-ur3BgC08MAAG668piOQy3gEB5Hgd10DgMAaG-YBMG9CQ4E1dBjmOXpTy2DZFyFWUyDlY0AEFjiYCBEOgABrFpNVdRINWOHoDDDIMDkxMBZHgZNbFTBwM1cWJDCIGBK2retGwAH1iV9DyLEsgKE2sGybVt2xgYEu3oEYez7XkBxnNZeBYtjbyAo1BWXVdHAMmBen49jLGsUs4MoTEsGPdDNksoz50fYRn3fNRWPgD81EYDVkGVcpXTgECDkBFSaMk2NEMSaQaMxKRjlkOCWgAu80MFTDNhwvC4AAZTESh8FVKBMENAqCH9MQwExPA4AAMjgeVEj8M4zHlU4DTgLq1EwY5mt4FN7HTZxglicMQCwFJIiqZTVI+ehPDmhalu0hk9IKrCDqlWUJrTJx6FiJyoE0fJImCcSvGRWpMDk+ttpWzs1rCUSxH7XaF0OgHAdM3YTu45wKwu4ArsE27AjrWJHvUZ7IjrftYtW5x-F+wcTKBvGZV2XG4CMGgMFgFA4E4D9DDUc4TIAAWYFhOAwW1metaAAC4GHRxJCOOd56DgQsGGeM50H5wW4EwdQQqpg5JFpiC1BI+hKioU48F4CtQam+gwHucxlt5yW1HKXWzoN7oHmCtsxfOU26z4C2eKtnoygqY2O1NvgGaZlnGhgdmaCgbn6ExTBpH1IWZf1YL6iIam-TS5XVcwIXKE18bOMmy3Ddt-oiEaZx+wjqO9Jd5w3Ztj36HTtsBhL7Sy-OPSiYAMU1uBvxdSPUD91gA7Zh4Q+5o5fEMTANcUbOdFz1389rr9KmqAfmZIQPg65hhZCFicp-ob8M81y0JxVsCINUEB3WczBZ7sU6F+to3yjV2Qj9Xkz8MwPvN3VUazBqj8pQaAsVGK1AOJwMQ4Bjh3GfhYDic9H7OBACgLo7tX5fnrnwKBMC4E9F6MRWQUBzj-QJrwXBJx8E216JnRQe1jTillHVROmhdTnB9KuOheBDSUNgegmhXUmDvEjq3HBRBoFUIEY8TQ0gyIoDIb0JRQA)
18+
## 🚀 Setup
19+
1. Install `ts-regexp`
20+
```shell
21+
# Using npm
22+
npm install ts-regexp
23+
24+
# Using yarn
25+
yarn add ts-regexp
26+
27+
# Using pnpm
28+
pnpm add ts-regexp
29+
```
30+
2. Import `typedRegExp`:
31+
```ts
32+
import { typedRegExp } from 'ts-regexp';
33+
```
34+
## 🧩 Usage
35+
36+
### Basic Usage
37+
38+
Import and use `typedRegExp` just like the native `RegExp` constructor:
39+
40+
```typescript
41+
import { typedRegExp } from 'ts-regexp';
42+
43+
const datePattern = typedRegExp('(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})');
44+
const emailPattern = typedRegExp('^(?<local>[a-z0-9._%+-]+)@(?<domain>[a-z0-9.-]+\.[a-z]{2,})$', 'i');
45+
```
46+
47+
The function signature is:
48+
```typescript
49+
typedRegExp(pattern: string, flags?: string)
50+
```
51+
> Note: `typedRegExp` returns a plain object, **not** a `RegExp` instance.
52+
53+
### Standard RegExp Methods
54+
55+
All standard `RegExp` methods work exactly as expected, but with equivalent or improved typing:
56+
57+
```typescript
58+
const pattern = typedRegExp('(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})', 'gid');
59+
60+
// Standard methods
61+
pattern.exec('1970-01-01')!.groups; // { year: string; month: string; day: string; }
62+
pattern.test('1970-01-01'); // boolean
63+
64+
// Access RegExp properties
65+
pattern.source; // "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})"
66+
pattern.flags; // "dgi"
67+
pattern.global; // true
68+
pattern.sticky; // false
69+
// ...
70+
```
71+
72+
### Regex-first Methods
73+
74+
Each `RegExp`-related `string.prototype` method is available as `${MethodName}In` with equivalent or improved typing:
75+
76+
```typescript
77+
const pattern = typedRegExp('(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})');
78+
const string = '1976-11-21';
79+
80+
// Instead of: string.match(pattern)
81+
const match = pattern.matchIn(string); // typed match
82+
83+
// Instead of: string.replace(pattern, replacement)
84+
const formatted1 = pattern.replaceIn(string, '$<day>/$<month>/$<year>');
85+
const formatted2 = pattern.replaceIn(string, (match, year, month, day, offset, string, groups) => `${groups.day}/${groups.month}/${groups.year}`); // typed arguments
86+
87+
// Other inversed methods
88+
pattern.searchIn(string); // like string.search(pattern)
89+
pattern.splitIn(string); // like string.split(pattern)
90+
```
91+
92+
### Global Flag Methods
93+
94+
When using the global (`g`) flag, additional methods become available:
95+
96+
```typescript
97+
const pattern = typedRegExp('\\d', 'g');
98+
99+
// Only available with 'g' flag
100+
pattern.matchAllIn('1973-12-08'); // like string.matchAll(pattern)
101+
pattern.replaceAllIn('123-456', '#'); // like string.replaceAll(pattern, replacement)
102+
```
103+
104+
### Advanced Usage
105+
106+
If you need access to the underlying `RegExp` instance:
107+
108+
```typescript
109+
const pattern = typedRegExp('\\d+');
110+
const nativeRegExp = pattern.regExp; // Regular RegExp instance
111+
```
112+
113+
## ✨ Features
114+
- ✅ Strictly typed named & unnamed capture groups
115+
- ✅ Supports contextual awareness
116+
- ✅ Parses:
117+
- nested groups
118+
- different group types (non-capturing, lookarounds, named captures, etc.)
119+
- alternation
120+
- character classes and escaped characters
121+
- ✅ Infers group optionality from quantifiers (`?`, `*`, `{n,m}`)
122+
- ✅ Validates flags
123+
- ✅ Supports dynamic (non-literal) pattern + flag inputs
124+
125+
126+
## 📘 API
127+
> 📋 **Planned**
128+
129+
For now, refer to [Examples](https://www.typescriptlang.org/play/?#code/JYWwDg9gTgLgBAbzjAnmApgEwEroOYCiAHmHAL5wBmUEIcA5DAM4C0U+6J9A3AFC8B6AXABCAQybAAxnACuTMXnS8pEAHZN4qDJgAiYmOgAKBw1DVwAvMjRZchEgAp6APUcB+ADwp0YqAD4AHUDMBAAWMgBKFg9PEHUYAAsgkIQAJiiYr0wxFBTQjMiAEnoAGgY8eki+VQ14TnQpXCYrGx19QxMYMzUAOgapZzSABlGWAEZhljSwqoBCXrwaWTAmPiE4TbgXdxV1TTh2MAAbMSl0ZtbtLA7jU3RzXqPT84BJNSHRqcnp2fLHEAGKSJco+PzleJqJLlHIocoQSiUJjoGDlTRQYBqPDlJYQFZMSJWfxwAAGRQQuPxvVhZF65Mpq16kKStPpy0ZYKgZBJkTm62EW0FQuFItFYvFEslUolO34GwAwglODBZGJjnAxAB3PzoNToJhMQQCuC4GBiTEtVRQdhSeAQMAwYDqNXAVBwABGEiwcHUcCYqgwezqPodTrUaoAiqqoa6UABxdktazXHD4YhgZxuLwAR2jjtQ+QA1LFZGpXf4ANpiFgALwAuoXIpF3CVIkygYl3p9hmAiPNFom+PbHc7jlGxDHUAm8YzS67+dKRbLgJQ4I5h2HI3nY9OqbmJ-mUISELxBRvR+PJ-HE705zBuHANq9V-ur3BgC08MAAG668piOQy3gEB5Hgd10DgMAaG-YBMG9CQ4E1dBjmOXpTy2DZFyFWUyDlY0AEFjiYCBEOgABrFpNVdRINWOHoDDDIMDkxMBZHgZNbFTBwM1cWJDCIGBK2retGwAH1iV9DyLEsgKE2sGybVt2xgYEu3oEYez7XkBxnNZeBYtjbyAo1BWXVdHAMmBen49jLGsUs4MoTEsGPdDNksoz50fYRn3fNRWPgD81EYDVkGVcpXTgECDkBFSaMk2NEMSaQaMxKRjlkOCWgAu80MFTDNhwvC4AAZTESh8FVKBMENAqCH9MQwExPA4AAMjgeVEj8M4zHlU4DTgLq1EwY5mt4FN7HTZxglicMQCwFJIiqZTVI+ehPDmhalu0hk9IKrCDqlWUJrTJx6FiJyoE0fJImCcSvGRWpMDk+ttpWzs1rCUSxH7XaF0OgHAdM3YTu45wKwu4ArsE27AjrWJHvUZ7IjrftYtW5x-F+wcTKBvGZV2XG4CMGgMFgFA4E4D9DDUc4TIAAWYFhOAwW1metaAAC4GHRxJCOOd56DgQsGGeM50H5wW4EwdQQqpg5JFpiC1BI+hKioU48F4CtQam+gwHucxlt5yW1HKXWzoN7oHmCtsxfOU26z4C2eKtnoygqY2O1NvgGaZlnGhgdmaCgbn6ExTBpH1IWZf1YL6iIam-TS5XVcwIXKE18bOMmy3Ddt-oiEaZx+wjqO9Jd5w3Ztj36HTtsBhL7Sy-OPSiYAMU1uBvxdSPUD91gA7Zh4Q+5o5fEMTANcUbOdFz1389rr9KmqAfmZIQPg65hhZCFicp-ob8M81y0JxVsCINUEB3WczBZ7sU6F+to3yjV2Qj9Xkz8MwPvN3VUazBqj8pQaAsVGK1AOJwMQ4Bjh3GfhYDic9H7OBACgLo7tX5fnrnwKBMC4E9F6MRWQUBzj-QJrwXBJx8E216JnRQe1jTillHVROmhdTnB9KuOheBDSUNgegmhXUmDvEjq3HBRBoFUIEY8TQ0gyIoDIb0JRQA) or [Usage](#-usage)
130+
## 📅 Project History
131+
[![latest release at 2025-09-07](https://img.shields.io/github/release-date-pre/codpro2005/ts-regexp)](https://github.com/codpro2005/ts-regexp/releases/latest)
132+
[![created at 2025-07-13](https://img.shields.io/github/created-at/codpro2005/ts-regexp)](https://github.com/codpro2005/ts-regexp/commits/main/)

0 commit comments

Comments
 (0)