如何用正则将JS类对象/数组节点路径字符串转换为节点数组
解决方案
我们可以通过正则匹配路径中所有有效节点,自动过滤分隔符(.、[]、属性外层引号),同时将数字索引自动转换为数字类型,最终输出目标数组,支持任意层级的嵌套路径转换。
function pathToArray(pathStr) { // 正则匹配两类节点:点分隔的标识符、方括号内的数字/字符串属性 const reg = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g; const result = []; pathStr.replace(reg, (match, num, quote, str) => { if (num) { // 方括号内数字索引,转数字类型 result.push(Number(num)); } else if (quote) { // 方括号内引号包裹的字符串属性,去除转义符 result.push(str.replace(/\\(.)/g, '$1')); } else { // 点分隔的属性名,直接保留 result.push(match); } }); return result; } // 测试验证 const variableName = "parent1[0].child[2].grandChild['name'].deep_child"; console.log(pathToArray(variableName)); // 输出:['parent1', 0, 'child', 2, 'grandChild', 'name', 'deepChild']
实现说明
- 正则匹配逻辑覆盖所有合法JS属性访问写法:
- 匹配所有合法JS标识符作为属性名,支持大小写字母、数字、下划线组合
- 兼容方括号内无引号的数字索引、单/双引号包裹的字符串属性两种写法
- 自动处理字符串属性内部的转义字符,返回原始属性值
- 适配任意层级的混合写法嵌套路径,无长度限制
内容的提问来源于stack exchange,提问作者Manojkumar
相关产品推荐
相关产品推荐

