You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome可用的JS正则在Node中报Invalid group错误求助

为什么Node.js里我的正则表达式报错但Chrome里正常?

这个问题我之前也碰到过,核心原因是正则里的正向预查(positive lookbehind)语法在不同环境的支持差异:

你写的(?<=__\()属于ES2018引入的正向预查特性,Chrome的V8引擎很早就跟进支持了这个特性,所以在浏览器里能正常运行;但Node.js的版本如果比较旧(比如10.x及以下),默认是不支持ES2018的lookbehind的,所以解析正则时会抛出Invalid group的语法错误。

解决方法有两种,你可以根据情况选:

1. 升级Node.js版本

如果可以的话,直接把Node.js升到12.x及以上版本——从Node.js 12开始,V8引擎已经默认支持ES2018的所有正则特性,包括正向预查,这样你的原正则代码不用改就能正常运行。

2. 修改正则,避开lookbehind语法

如果暂时没法升级Node版本,完全可以换一种写法实现需求,不用依赖lookbehind。比如利用捕获组来提取内容:

const file = "__('string to be extracted');";
const regex = /__\((.*?)\)/g;
const strings = [];
let match;
// 通过循环exec获取所有匹配的捕获组
while ((match = regex.exec(file)) !== null) {
  strings.push(match[1]);
}
console.log(strings); // 输出 ["'string to be extracted'"]

要是还想直接去掉字符串两端的引号,可以把正则再细化一点:

const regex = /__\(['"](.*?)['"]\)/g;
// 此时strings会输出 ["string to be extracted"]

额外说明

如果非要坚持用原正则的lookbehind写法,也可以在运行Node时加上--harmony参数(比如node --harmony your-file.js),但这个参数是实验性的,稳定性不如直接升级版本,所以不太推荐。

内容的提问来源于stack exchange,提问作者Asleepace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:50:50