{"_id":"@dafengzhen/regex-derivative","_rev":"2-954bd03f9789b6f9d79844b0b6c9ea73","name":"@dafengzhen/regex-derivative","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@dafengzhen/regex-derivative","version":"0.1.0","keywords":["brzozowski","complement","derivative","dfa","intersection","lexer","parser","pattern-matching","regex","regular-expression","typescript","union"],"author":{"name":"dafengzhen"},"license":"MIT","_id":"@dafengzhen/regex-derivative@0.1.0","maintainers":[{"name":"dafengzhen","email":"dafengzhen@aliyun.com"}],"homepage":"https://github.com/dafengzhen/regex-derivative#readme","bugs":{"url":"https://github.com/dafengzhen/regex-derivative/issues"},"dist":{"shasum":"659a1f034bdfc7c697ab2f5edd86e8d4836a9c27","tarball":"https://registry.npmjs.org/@dafengzhen/regex-derivative/-/regex-derivative-0.1.0.tgz","fileCount":29,"integrity":"sha512-h/Krf1c0WD26vmOMTo8ow9lJhPG3wW43tClhQkclgP/w6V0kPoURRhwLv+vXEmzOHELn2YQ5sxNeVW5LQN22kw==","signatures":[{"sig":"MEUCIQCifvCBbszyMyKDjDRoVRIO8T4+3x+CiJV1ol/HnuAstAIgWACpznnGmjkp8yWpAhfKvSh+ZTE1A3pevH5FnNuqwcQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1136053},"main":"./dist/cjs/modern/index.js","type":"module","types":"./dist/types/index.d.ts","module":"./dist/esm/modern/index.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/modern/index.js","default":"./dist/esm/modern/index.js","require":"./dist/cjs/modern/index.js"}},"gitHead":"ce44320bd9064df27e094d5eddc9536d8922a5da","scripts":{"fmt":"oxfmt","lint":"oxlint","test":"jest","build":"npm run build:types && npm run build:modern && npm run build:legacy && npm run build:dev","watch":"parcel watch","test:c":"jest src --coverage","prepare":"husky install","lint:fix":"oxlint --fix","lint:fmt":"npm run lint:fix && npm run fmt","build:dev":"parcel build src/index.ts --target modern-esm-dev --target modern-cjs-dev --target legacy-esm-dev --target legacy-cjs-dev","fmt:check":"oxfmt --check","build:types":"tsc -p tsconfig.types.json","build:legacy":"parcel build src/index.ts --target legacy-esm --target legacy-cjs","build:modern":"parcel build src/index.ts --target modern-esm --target modern-cjs"},"targets":{"legacy-cjs":{"distDir":"./dist/cjs/legacy","engines":{"browsers":">0.3%, Chrome >= 87, ChromeAndroid >= 87, Edge >= 87, Firefox >= 83, FirefoxAndroid >= 83, Safari >= 14, iOS >= 14"},"optimize":true,"isLibrary":true,"sourceMap":true,"outputFormat":"commonjs","includeNodeModules":true},"legacy-esm":{"distDir":"./dist/esm/legacy","engines":{"browsers":">0.3%, Chrome >= 87, ChromeAndroid >= 87, Edge >= 87, Firefox >= 83, FirefoxAndroid >= 83, Safari >= 14, iOS >= 14"},"optimize":true,"isLibrary":true,"sourceMap":true,"outputFormat":"esmodule","includeNodeModules":true},"modern-cjs":{"distDir":"./dist/cjs/modern","optimize":true,"isLibrary":true,"sourceMap":true,"outputFormat":"commonjs","includeNodeModules":true},"modern-esm":{"distDir":"./dist/esm/modern","optimize":true,"isLibrary":true,"sourceMap":true,"outputFormat":"esmodule","includeNodeModules":true},"legacy-cjs-dev":{"distDir":"./dist/cjs/legacy-dev","engines":{"browsers":">0.3%, Chrome >= 87, ChromeAndroid >= 87, Edge >= 87, Firefox >= 83, FirefoxAndroid >= 83, Safari >= 14, iOS >= 14"},"optimize":false,"isLibrary":true,"sourceMap":true,"outputFormat":"commonjs","includeNodeModules":true},"legacy-esm-dev":{"distDir":"./dist/esm/legacy-dev","engines":{"browsers":">0.3%, Chrome >= 87, ChromeAndroid >= 87, Edge >= 87, Firefox >= 83, FirefoxAndroid >= 83, Safari >= 14, iOS >= 14"},"optimize":false,"isLibrary":true,"sourceMap":true,"outputFormat":"esmodule","includeNodeModules":true},"modern-cjs-dev":{"distDir":"./dist/cjs/modern-dev","optimize":false,"isLibrary":true,"sourceMap":true,"outputFormat":"commonjs","includeNodeModules":true},"modern-esm-dev":{"distDir":"./dist/esm/modern-dev","optimize":false,"isLibrary":true,"sourceMap":true,"outputFormat":"esmodule","includeNodeModules":true}},"_npmUser":{"name":"dafengzhen","email":"dafengzhen@aliyun.com"},"repository":{"url":"git+https://github.com/dafengzhen/regex-derivative.git","type":"git"},"_npmVersion":"11.6.2","description":"A regular expression engine based on Brzozowski derivatives, supporting standard syntax plus intersection, complement, and union operators. Compiles to DFA for efficient matching, with full TypeScript support.","directories":{},"lint-staged":{"*":"npm run fmt --no-error-on-unmatched-pattern","*.{js,jsx,ts,tsx,mjs,cjs}":"npm run lint"},"_nodeVersion":"24.11.1","dependencies":{"@swc/helpers":"^0.5.19","browserslist-config-baseline":"^0.5.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","oxfmt":"^0.38.0","oxlint":"^1.53.0","parcel":"^2.16.4","ts-node":"^10.9.2","babel-jest":"^30.3.0","typescript":"^5.9.3","@babel/core":"^7.29.0","@types/node":"^25.4.0","@jest/globals":"^30.3.0","@commitlint/cli":"^20.4.3","@babel/preset-env":"^7.29.0","@parcel/packager-ts":"^2.16.4","@commitlint/prompt-cli":"^20.4.3","jest-environment-jsdom":"^30.3.0","@babel/preset-typescript":"^7.28.5","@commitlint/config-conventional":"^20.4.3","@parcel/transformer-typescript-types":"^2.16.4"},"_npmOperationalInternal":{"tmp":"tmp/regex-derivative_0.1.0_1773249832704_0.6526090381730325","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."}},"time":{"created":"2026-03-11T17:23:52.279Z","modified":"2026-05-14T19:07:38.570Z","0.1.0":"2026-03-11T17:23:52.925Z"},"bugs":{"url":"https://github.com/dafengzhen/regex-derivative/issues"},"author":{"name":"dafengzhen"},"license":"MIT","homepage":"https://github.com/dafengzhen/regex-derivative#readme","keywords":["brzozowski","complement","derivative","dfa","intersection","lexer","parser","pattern-matching","regex","regular-expression","typescript","union"],"repository":{"url":"git+https://github.com/dafengzhen/regex-derivative.git","type":"git"},"description":"A regular expression engine based on Brzozowski derivatives, supporting standard syntax plus intersection, complement, and union operators. Compiles to DFA for efficient matching, with full TypeScript support.","maintainers":[{"name":"dafengzhen","email":"dafengzhen@aliyun.com"}],"readme":"## regex-derivative\n\n[![GitHub License](https://img.shields.io/github/license/dafengzhen/regex-derivative?color=blue)](https://github.com/dafengzhen/regex-derivative)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/dafengzhen/regex-derivative/pulls)\n\n[English](./README.md)\n\n基于 **Brzozowski 导数** 的正则表达式引擎。支持标准正则语法，以及并集、交集、补集操作。通过将正则表达式转换为确定有限自动机（DFA）实现高效匹配。完全使用 TypeScript 编写。\n\n- 标准正则语法：字符、`.`、`*`、`+`、`?`、`{}`、`[]`、`^`、`$`、`()`、`|`\n- 扩展操作符：\n  - 并集 `|`\n  - 交集 `&`\n  - 补集 `!`\n- 预定义字符类：`\\d`、`\\D`、`\\w`、`\\W`、`\\s`、`\\S`\n- 基于导数的 DFA 构建（Brzozowski 导数）\n- 支持锚点 `^` 和 `$`（内部通过特殊标记处理）\n- 编译后 DFA 快速匹配\n- 完全 TypeScript 类型定义\n- 无依赖\n\n## 安装\n\n```bash\nnpm install @dafengzhen/regex-derivative\n```\n\n## 快速开始\n\n```ts\nimport { compile } from '@dafengzhen/regex-derivative';\n\nconst matcher = compile('[a-z]+@[a-z]+\\\\.[a-z]{2,}');\nconsole.log(matcher.match('hello@example.com')); // true\nconsole.log(matcher.match('invalid')); // false\n```\n\n使用扩展操作符（交集、补集）：\n\n```ts\n// 匹配既是字母又是元音的字符（交集）\nconst vowelMatcher = compile('[a-z]&[aeiou]');\nconsole.log(vowelMatcher.match('a')); // true\nconsole.log(vowelMatcher.match('b')); // false\n\n// 匹配非数字字符（补集）\nconst nonDigitMatcher = compile('!\\\\d');\nconsole.log(nonDigitMatcher.match('x')); // true\nconsole.log(nonDigitMatcher.match('5')); // false\n```\n\n## API 参考\n\n### 核心函数\n\n#### compile(pattern: string): Matcher\n\n编译正则表达式模式，返回一个 Matcher 对象。结果会被缓存（LRU，最多 128 条），重复编译相同模式将返回缓存中的匹配器。\n\n```ts\nimport { compile } from '@dafengzhen/regex-derivative';\n\nconst matcher = compile('^hello world$');\n```\n\n#### clearCompileCache(): void\n\n清空编译缓存。\n\n### 类\n\n#### Lexer\n\n将输入字符串转换为 Token 流。\n\n```ts\nimport { Lexer } from '@dafengzhen/regex-derivative';\n\nconst lexer = new Lexer('[a-z]');\nconst tokens = lexer.tokenize();\n```\n\n#### Parser\n\n将 Token 流解析为抽象语法树（Expr）。\n\n```ts\nimport { Parser } from '@dafengzhen/regex-derivative';\n\nconst parser = new Parser(tokens);\nconst expr = parser.parse();\n```\n\n#### Builder\n\n基于表达式构建 DFA。\n\n```ts\nimport { Builder } from '@dafengzhen/regex-derivative';\n\nconst builder = new Builder(expr);\nconst dfa = builder.build();\n```\n\n#### Matcher\n\n用于执行匹配的类。通常通过 compile 获得。\n\n```ts\nimport { Matcher } from '@dafengzhen/regex-derivative';\n\ninterface Matcher {\n  match(input: string): boolean;\n}\n```\n\n### 类型导出\n\n```ts\nimport type { Expr, Dfa, Token, CharRange, PredefinedClass } from '@dafengzhen/regex-derivative';\n```\n\n### 工作原理\n\n本引擎基于 Brzozowski **导数** 构建 DFA。核心思想：\n\n1. 将正则表达式解析为抽象语法树（`Expr`）。\n2. 通过 `derive(expr, char)` 计算表达式在某个字符下的导数（即剩余语言）。\n3. 从初始表达式开始，对每个可达的导数表达式分配一个 DFA 状态。\n4. 重复直到没有新状态产生，得到完整的 DFA 转移表。\n5. 匹配时只需模拟 DFA 运行，时间复杂度 O(n)。\n\n这种方法的优点是可以自然地支持并集、交集、补集等集合操作，无需额外的构造算法。\n\n## 开发与测试\n\n### 安装依赖\n\n```bash\nnpm install\n```\n\n### 构建\n\n```bash\nnpm run build\n```\n\n### 测试\n\n```bash\nnpm test\n```\n\n## 贡献\n\n欢迎贡献 PR！\n\n## License\n\n[MIT](https://opensource.org/licenses/MIT)\n","readmeFilename":"README.zh.md"}