Shiki项目JS引擎升级:Oniguruma-To-ES带来革命性改进
2025-05-20 17:01:51作者:伍希望
Shiki项目近期迎来了一项重大技术升级——将原有的JS正则表达式引擎替换为全新的Oniguruma-To-ES实现。这一改变为语法高亮功能带来了质的飞跃,显著提升了正则表达式处理的准确性和兼容性。
兼容性大幅提升
通过详细的测试对比,新引擎在各项指标上都展现出了明显优势。在默认模式下,新引擎支持的语法数量从176个提升至181个,不匹配数量从23个降至20个。更为关键的是,当启用"forgiving"模式(模拟Oniguruma引擎的错误处理行为)时,支持数量达到185个,同时完全消除了不支持的语法情况。
测试数据中的"diff"值(衡量匹配差异程度的指标)从原有的8750降至6529,这一数值的显著降低表明新引擎在匹配结果上更加接近原生Oniguruma引擎的行为。
技术实现突破
Oniguruma-To-ES引擎实现了多项技术突破:
- 精准的语法转换:能够正确处理Oniguruma特有的语法结构,包括复杂的边界断言和回溯控制
- 完善的Unicode支持:在保持轻量级的同时,完整实现了Unicode属性匹配和大小写折叠等高级功能
- 多版本ECMAScript兼容:支持ES2018、ES2024和ES2025多个JavaScript标准版本,为未来升级预留空间
实际应用价值
对于Shiki用户而言,这一升级意味着:
- 更准确的语法高亮效果,特别是对于使用复杂正则表达式的语言定义
- 更稳定的运行表现,减少了因正则表达式处理差异导致的意外行为
- 为未来完全采用JS引擎作为默认选项奠定了技术基础
未来发展方向
虽然当前版本已经取得了显著进步,开发团队仍规划了多项改进方向:
- 进一步优化
\G
锚点的处理逻辑 - 增强对递归模式的支持
- 改进字符类范围的转换精度
- 提升性能表现
这次引擎升级标志着Shiki项目在正则表达式处理方面迈出了重要一步,为开发者提供了更可靠、更强大的语法高亮解决方案。随着后续版本的持续优化,Shiki有望在不依赖原生绑定的情况下,提供与原生引擎相媲美的使用体验。
登录后查看全文
热门内容推荐
最新内容推荐
Apache Fury Python序列化优化:元字符串长度与标志位合并技术解析 Docker-Jitsi-Meet中Jibri录制功能配置指南 rkyv项目中的高性能通用内存分配器实现解析 SkyThought项目中的数学推理数据生成机制解析 LinuxServer SWAG容器中Maxmind错误的分析与解决方案 深入理解next-intl中的静态生成与国际化配置问题 FixTweet/FxTwitter项目实现iMessage分享链接图标自定义功能解析 Fury项目中的元字符串编码算法在Golang中的实现 Trimesh项目中OBJ格式四边面UV映射问题的分析与解决 ZMK固件中Hold-Tap行为与Caps Word功能的结合使用
项目优选
收起

React Native鸿蒙化仓库
C++
102
183

openGauss kernel ~ openGauss is an open source relational database management system
C++
53
124

🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
457
375

🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
51
14

本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
277
495

前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。
官网地址:https://matechat.gitcode.com
674
82

旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
88
245

方舟分析器:面向ArkTS语言的静态程序分析框架
TypeScript
29
37

🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
354
36

本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
345
243