Safari报SyntaxError:无效正则表达式组名evaluateWithScopeExtension问题咨询
Safari运行JavaScript正则抛出SyntaxError错误排查及适配方案
错误原因
- 报错根因是正则表达式中使用了可变长度的后行断言:你代码里的
(?<=订单号:(\d+,)*)属于后行断言语法,其中*量词代表的匹配长度不固定 - Safari浏览器的正则引擎对后行断言的支持存在版本限制:Safari 16.4及更早版本不支持可变长度的后行断言,只要后行断言括号内出现
*、+、{n,}这类非固定长度的量词,就会直接抛出SyntaxError: Invalid regular expression: invalid group specifier name语法错误
适配方案
方案1:替换为捕获组写法(全浏览器兼容,优先推荐)
不需要使用后行断言,把不需要修改的前缀部分放在捕获组里保留,只捕获需要处理的内容即可,示例代码如下:
const originStr = '系统订单号:1717985597717212672;系统订单号:1718005616957731072;'; // $1对应第一个捕获组的前缀内容,m对应需要处理的匹配内容 const processedStr = originStr.replace(/(订单号:(?:\d+,)*)(\d+=|$)/g, (match, $1, m) => { console.log(`[logger-m] => `, m) return $1 + m; });
方案2:升级Safari版本
如果业务允许仅兼容高版本浏览器,可引导用户将Safari升级到16.4及以上版本,该版本开始正式支持可变长度的后行断言语法。
内容的提问来源于stack exchange,提问作者quanquan
相关产品推荐
相关产品推荐

