Regex Test Preview
一个用于测试和预览正则表达式的VSCode插件,支持自动实时高亮显示匹配结果。参考了 JetBrains Regexp Tester 的设计理念。
✨ 核心特性
- 🎯 自动实时匹配 - 输入正则表达式和文本,自动显示高亮匹配结果
- 🎨 文本高亮显示 - 匹配的文本以蓝色背景高亮,清晰直观
- ⚡ 无需按钮操作 - 移除了多余的测试按钮,输入即匹配
- 🔄 Canvas背景技术 - 使用Canvas绘制高亮背景,彻底解决文字叠加问题
- 🎛️ 标志支持 - 支持正则表达式标志(g, i, m, s, u, y)
- 🛡️ 错误处理 - 友好的错误提示和状态显示
- 🚀 性能优化 - 300ms防抖技术,流畅的用户体验
- 🌙 主题适配 - 深色主题设计,完美融入VSCode环境
- 📱 高DPI支持 - 支持Retina显示器,锐利渲染
📦 安装指南
可直接在VSCode插件市场中搜索
方法一:安装 VSIX 文件(推荐)
下载 VSIX 文件
- 获取
regex-test-preview-0.0.1.vsix
文件
在 VSCode 中安装
- 打开 VSCode
- 按
Ctrl+Shift+P
打开命令面板
- 输入 "Extensions: Install from VSIX"
- 选择下载的 VSIX 文件
重新加载 VSCode
- 安装完成后,按
Ctrl+Shift+P
- 输入 "Developer: Reload Window"
- 选择重新加载窗口
方法二:开发模式安装
克隆项目
git clone <repository-url>
cd RegexTestPreview
安装依赖
npm install
编译代码
npm run compile
在 VSCode 中调试
- 打开项目文件夹
- 按
F5
启动调试会话
- 在新窗口中测试插件
验证安装
检查插件列表
- 按
Ctrl+Shift+X
打开扩展面板
- 搜索 "Regex Test Preview"
- 确认插件已安装
测试功能
- 按
Ctrl+Shift+P
- 输入 "Regex Test Preview"
- 选择 "Open Regex Test Preview"
- 测试正则表达式功能
🚀 使用方法
启动插件
- 安装插件后,按
Ctrl+Shift+P
- 输入 "Regex Test Preview" 或 "Open Regex Test Preview"
- 选择命令打开测试面板
界面说明
在打开的面板中:
- 正则表达式输入框:输入正则表达式模式
- 标志输入框:输入正则标志(默认为 g)
- 测试文本区域:可直接编辑的文本区域,背景显示高亮匹配结果
- 状态栏:显示匹配数量和错误信息
操作步骤
- 在第一个输入框中输入正则表达式
- 在标志框中输入正则标志(可选)
- 在文本区域中输入或编辑测试文本
- 查看自动高亮的匹配结果
快捷键
Ctrl+Shift+P
→ "Regex Test Preview" - 打开正则测试面板
Escape
- 快速切换到高亮查看模式
📚 示例演示
1. 数字匹配
正则表达式: \d+
标志: g
测试文本: Hello 123 World 456 Test 789
预期结果: 数字 123、456、789 会被高亮显示
2. 邮箱验证
正则表达式: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
标志: g
测试文本:
支持以下邮箱:
- user@example.com
- test.email+alex@company.org
- user_name@sub.domain.co.uk
- invalid.email@ (这个不会被匹配)
3. 手机号提取
正则表达式: 1[3-9]\d{9}
标志: g
测试文本:
联系方式:
张三: 13812345678
李四: 15987654321
王五: 12345678901 (格式不正确)
4. URL匹配
正则表达式: https?://[^\s]+
标志: g
测试文本:
有用的网站:
- https://www.google.com
- http://github.com
- https://regex101.com
5. 提取HTML标签
正则表达式: <[^>]+>
标志: g
测试文本: <div class="container"><p>Hello <strong>World</strong></p></div>
6. 日期格式匹配
正则表达式: \d{4}[-/]\d{1,2}[-/]\d{1,2}
标志: g
测试文本:
重要日期:
2024-01-01
2024/12/25
2024-2-14
7. 匹配单词(忽略大小写)
正则表达式: \btest\w*
标志: gi
测试文本: This is a Test of testing functionality
标志说明
g
- 全局匹配(查找所有匹配项)
i
- 忽略大小写
m
- 多行模式
s
- 点号匹配换行符
u
- Unicode模式
y
- 粘性匹配
🏗️ 技术架构与演进
当前技术方案(Canvas + Textarea)
核心原理:
- textarea 用于文本输入,位于上层(z-index: 2)
- canvas 作为背景层,用于绘制高亮(z-index: 1)
- 无叠加:文字和背景完全分离,不会有任何叠加问题
技术特点:
- 精确文本测量 - 使用
ctx.measureText()
获取真实的字符宽度
- 高DPI支持 - 支持
devicePixelRatio
实现锐利渲染
- 改进的定位算法 - 使用真实文本宽度计算X坐标
- 按行分组处理 - 将匹配项按行分组处理,支持多行匹配
- 滚动同步优化 - 使用CSS transform同步滚动
技术演进历程
版本1.0:初始实现
- 使用隐藏的textarea + 显示的div
- 需要点击切换编辑模式
- 高亮显示有延迟
版本2.0:Overlay实时高亮
- 使用透明的overlay覆盖在textarea上方
- 实现了真正的实时高亮
- 但出现了文字叠加和对齐问题
版本3.0:Canvas背景高亮(当前)
- 使用Canvas绘制高亮背景
- 彻底解决文字叠加问题
- 支持精确对齐和高DPI显示
核心技术
- TypeScript: 主要开发语言
- VSCode Extension API: 插件框架
- Webview: UI界面实现
- Canvas API: 高亮背景绘制
- HTML/CSS/JavaScript: 前端技术
- 正则表达式: 核心功能
🔧 故障排除与已知问题修复
已修复的主要问题
1. 页面初始化问题
问题:插件界面出现JavaScript错误,缺少初始文本内容
解决:
- 恢复初始文本内容
- 增强错误处理机制
- 改进初始化逻辑
2. 文字叠加问题
问题:textarea和overlay的文字没有完全对齐,高亮背景遮盖文字
解决:
- 放弃overlay方案
- 使用Canvas + textarea组合方案
- 彻底解决文字叠加问题
3. 高亮对齐问题
问题:高亮和实际匹配文本出现对齐偏差
解决:
- 使用精确文本测量而非估算
- 支持高DPI渲染
- 改进定位算法
常见问题解答
Q: 插件无法启动?
A: 确保 VSCode 版本 >= 1.74.0,并重新加载窗口。
Q: 正则匹配不工作?
A: 检查正则表达式语法是否正确,确保标志使用正确。
Q: 高亮不显示?
A: 确保输入了有效的正则表达式和测试文本。
Q: 高亮位置不准确?
A: 插件使用精确文本测量,如有偏差请检查字体设置是否为等宽字体。
Q: 如何编辑文本?
A: 文本区域始终可编辑,直接点击即可编辑。
Q: 如何卸载插件?
A: 在扩展面板中找到 Regex Test Preview,点击卸载按钮。
Q: 支持哪些正则标志?
A: 支持 g, i, m, s, u, y 等常用标志。
Q: 插件是否会保存我的正则表达式?
A: 当前版本不会保存,建议您复制常用的正则表达式到其他地方。
🛠️ 开发指南
构建要求
- Node.js 16+
- VSCode 1.74+
- TypeScript 4.9+
项目结构
RegexTestPreview/
├── src/
│ └── extension.ts # 主要扩展逻辑
├── out/ # 编译输出目录
├── resources/
│ └── icons/
│ └── regex-icon.svg # 插件图标
├── .vscode/
│ ├── launch.json # 调试配置
│ └── tasks.json # 任务配置
├── package.json # 项目配置
├── tsconfig.json # TypeScript配置
├── .eslintrc.json # ESLint配置
├── .vscodeignore # VSCode忽略文件
├── .gitignore # Git忽略文件
├── README.md # 项目说明
└── LICENSE # 许可证文件
开发命令
npm install # 安装依赖
npm run compile # 编译代码
npm run watch # 监听模式编译
npm run lint # 代码检查
npm run package # 打包插件
npm run publish # 发布插件
调试方法
- 按
F5
启动调试会话
- 在新的VSCode窗口中测试插件
📊 发布指南
发布前的准备工作
配置package.json
{
"publisher": "YOUR_PUBLISHER_NAME",
"repository": {
"type": "git",
"url": "https://github.com/YOUR_USERNAME/regex-test-preview.git"
},
"license": "MIT"
}
获取Publisher Name
发布插件
npm install -g @vscode/vsce
vsce login YOUR_PUBLISHER_NAME
npm run publish
发布检查清单
- [ ] 代码编译无错误:
npm run compile
- [ ] 代码规范检查:
npm run lint
- [ ] 插件能正常启动:按
F5
测试
- [ ] 所有功能正常工作
- [ ] README.md 内容完整
- [ ] package.json 字段正确
- [ ] 版本号合适
🤝 贡献指南
欢迎提交Issue和Pull Request!
提交Issue
- 描述问题的详细信息
- 提供复现步骤
- 包含相关的错误信息
- 说明您的VSCode版本和插件版本
提交Pull Request
- Fork 项目
- 创建功能分支
- 提交更改
- 创建 Pull Request
未来改进方向
- 保存历史记录: 记住常用的正则表达式
- 导入/导出: 支持正则表达式的导入导出
- 语法提示: 正则表达式语法高亮和自动补全
- 更多标志: 支持更多正则引擎的标志
- 性能统计: 显示匹配性能数据
- 测试用例: 内置常用的正则表达式示例
- 主题自定义: 支持自定义高亮颜色
📝 更新日志
v0.0.1 (最新)
- ✅ 自动实时匹配 - 无需按钮,输入即匹配
- ✅ Canvas背景高亮 - 彻底解决文字叠加问题
- ✅ 精确对齐 - 使用真实文本测量,完美对齐
- ✅ 高DPI支持 - 支持Retina显示器
- ✅ 性能优化 - 300ms防抖技术
- ✅ 界面优化 - 自适应宽度和一致样式
- ✅ 错误处理 - 友好的错误提示
- ✅ 完整文档 - 详细的使用指南和示例
技术演进
- v0.0.1-alpha: 初始实现,基本功能
- v0.0.1-beta: 添加实时高亮,overlay方案
- v0.0.1-rc: 修复文字叠加问题,Canvas方案
- v0.0.1: 优化对齐,高DPI支持,正式发布
📄 许可证
MIT License
享受自动实时高亮的正则表达式测试体验! ⚡
如果这个插件对您有帮助,请给个⭐️鼓励一下!