|
1 | | -# ts-regexp |
2 | | -[](https://www.npmjs.com/package/ts-regexp) |
3 | | -[](https://www.npmjs.com/package/ts-regexp) |
4 | | -[](https://www.npmjs.com/package/ts-regexp) |
5 | | -[](https://www.typescriptlang.org/) |
6 | | -[](https://opensource.org/licenses/MIT) |
7 | | -[](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 | | -[](https://github.com/codpro2005/ts-regexp/releases/latest) |
132 | | -[](https://github.com/codpro2005/ts-regexp/commits/main/) |
| 1 | +# ts-regexp |
| 2 | +[](https://www.npmjs.com/package/ts-regexp) |
| 3 | +[](https://www.npmjs.com/package/ts-regexp) |
| 4 | +[](https://www.npmjs.com/package/ts-regexp) |
| 5 | +[](https://www.typescriptlang.org/) |
| 6 | +[](https://opensource.org/licenses/MIT) |
| 7 | +[](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 | +[](https://github.com/codpro2005/ts-regexp/releases/latest) |
| 132 | +[](https://github.com/codpro2005/ts-regexp/commits/main/) |
0 commit comments