React Native/Expo中正则命名捕获组静默失效问题求助
React Native/Expo中正则命名捕获组静默失效问题求助
大家好,我最近碰到了一个很棘手的问题:同样的正则命名捕获组代码,在Vite+React的Web项目里运行完全正常,但放到React Native/Expo的移动端项目里就彻底失效了,想请教下有没有解决办法。
环境说明
- Expo SDK 52
- React Native 0.76.9
- 测试平台:Android/iOS(Web端用的是普通React+Vite,非Expo Web,运行正常)
问题具体表现
我做了一个时间解析的公共模块,里面用到了带命名捕获组的正则,比如匹配星期的这个:
const dayRegex = /\b(?<day>mon(?:day)?|tues?(?:day)?|wed(?:nesday)?|thu(?:rsday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?)\b/gi;
在Web项目里用matchAll()遍历匹配结果、读取命名组groups.day都没问题,但到了Expo移动端,这段代码就静默失效——完全匹配不到任何内容。
更奇怪的是,普通的字符串检查比如string.includes()是正常工作的,唯独涉及命名捕获组的matchAll()会出问题。
已经尝试过的方案
- 安装并配置了Babel转译插件:
@babel/plugin-transform-named-capturing-groups-regex@babel/plugin-transform-duplicate-named-capturing-groups-regex
- 清除了Metro缓存,并且重新构建了项目,但问题依然存在。
想请教的问题
- React Native的JS引擎(不管是Hermes还是JSC)是不是真的对ES2018的命名捕获组支持不完善?这是已知的限制吗?
- 有没有不用把所有正则都改成编号组的替代方案?因为这段代码在Web和移动端共用的包里面,维护两套正则实在太麻烦了,真的想尽量保留原有的正则模式。
内容来源于stack exchange
相关产品推荐
相关产品推荐

