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

如何用JavaScript正则表达式提取字符串中所有方括号内的索引

提取字符串中[]包裹的索引:正则表达式稳健方案

嘿,我懂你的需求——从类似info.name[0][1][5].data[0]这种格式的字符串里,精准提取所有被方括号包裹的索引值,而且不想依赖任何第三方库对吧?你现有的代码虽然能正常运行,但确实存在边界失效的风险(比如字符串里出现非预期的[/]字符时,split+reverse的逻辑很容易混乱),用正则表达式确实是更靠谱的选择。

正则方案实现

我们可以用全局匹配正则直接定位[和]之间的数字索引,完全规避分割逻辑的潜在问题:

基础实现代码

const a = 'info.name[0][1][5].data[0]';
// 正则:精准匹配[数字]格式,全局搜索
const indexRegex = /\[(\d+)\]/g;
const collect = [];
let matchResult;

// 遍历所有匹配项
while ((matchResult = indexRegex.exec(a)) !== null) {
  // matchResult[1]是捕获到的索引值,如需数字类型可转成parseInt(matchResult[1], 10)
  collect.push(matchResult[1]);
}

console.log(collect); // 输出: ["0", "1", "5", "0"]

正则表达式解析

  • \[:匹配左方括号([在正则里是特殊字符,必须转义)
  • (\d+):捕获一个或多个数字(\d匹配单个数字,+表示至少出现一次),括号用于提取我们需要的核心内容
  • \]:匹配右方括号(同样需要转义)
  • g:全局匹配标志,确保遍历字符串中所有符合条件的部分

ES6+ 简洁写法

如果你的运行环境支持现代JS语法,也可以用matchAll简化代码:

const a = 'info.name[0][1][5].data[0]';
const collect = Array.from(a.matchAll(/\[(\d+)\]/g), item => item[1]);
console.log(collect); // 输出: ["0", "1", "5", "0"]

为什么这个方案更可靠?

你原来的代码依赖split(']').reverse()的分割逻辑,一旦字符串出现异常格式(比如包含[abc]这类非数字内容、或者不配对的方括号),就会提取出错误的内容。而正则是精准匹配我们需要的模式([数字]),完全不受无关字符干扰,鲁棒性拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:58:07