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

如何使用JavaScript正则表达式提取let声明语句中的变量名

JS提取let声明中的所有变量名方案

问题原因

你原来的正则存在两个核心问题:

  • 正则中的.*是贪婪匹配,从第一个变量的赋值符号=之后,会直接匹配到整行末尾,把后面两个变量的内容全部吞掉,自然无法捕获后续变量
  • 没有加全局匹配标识g,即使正则逻辑正确也只会返回第一个匹配结果

实现方案

方案1:两步处理(兼容性最优)

不需要用到高级正则特性,所有JS运行环境都支持:

const str = `let URL="https://www.lipsum.com/", error, pass=true;`;
// 第一步提取let到结尾分号之间的声明内容
const declarePart = str.match(/let\s+(.*?);/)[1];
// 第二步匹配所有变量名,自动跳过赋值内容
const variableNames = declarePart.match(/[\w_$]+(?=\s*(?:=|,|$))/g);

console.log(variableNames); // 输出:['URL', 'error', 'pass']

方案2:单条正则实现

需要ES2018及以上支持后行断言的环境使用:

const str = `let URL="https://www.lipsum.com/", error, pass=true;`;
const regex = /(?<=\blet\s+(?:.*?,)?\s*)[\w_$]+(?=\s*(?:=|,|;))/g;
const variableNames = str.match(regex);

console.log(variableNames); // 输出:['URL', 'error', 'pass']

核心逻辑说明

  • 全局标识g会让正则匹配所有符合规则的结果,而不是仅返回第一个匹配项
  • 正向断言(?=)用来限定变量名的后缀只能是等号、逗号、行尾,不会把断言内的内容计入匹配结果
  • 非贪婪匹配.*?避免一次性吞掉所有后续内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 12:06:11