如何用JavaScript将分号分隔的特定字符串转为JS/JSON对象?
把分号分隔的特殊字符串转成JavaScript对象的实现方案
我来帮你搞定这个字符串转对象的需求!你说的思路完全没问题——先按分号拆分,再提取键名、索引和值,下面是具体的实现步骤和代码:
步骤拆解
- 拆分原始字符串:用分号把整个字符串拆分成单个的键值条目,同时过滤掉可能的空条目(比如字符串末尾的分号会产生空项)。
- 提取关键信息:每个条目是类似
"MT"[1]:"111"的格式,我们用正则表达式来匹配并提取出对象键名(比如MT)、索引(比如1)和对应的值(比如111)。 - 构建目标对象:初始化一个空对象,遍历每个条目,把提取到的信息按
键名[索引] = 值的结构填充进去。
完整代码示例
// 你的原始输入字符串 const inputStr = `"MT"[1]:"111";"Medium"[1]:"AAA";"Medium"[2]:"BBB";"Medium"[3]:"CCC";"Medium"[4]:"DDD";"bar"[1]:"24";"bar"[2]:"1,5";"bar"[3]:"3";"bar"[4]:"7,5";"S_Id"[1]:"555";"S_Nr"[1]:"666"`; // 1. 拆分条目并过滤空项 const entries = inputStr.split(';').filter(entry => entry.trim() !== ''); // 2. 初始化结果对象 const result = {}; // 3. 定义正则表达式,用于匹配每个条目里的键名、索引、值 const entryPattern = /"([^"]+)"\[(\d+)\]:"([^"]+)"/; // 4. 遍历每个条目,构建对象 entries.forEach(entry => { const matchResult = entry.match(entryPattern); // 确保匹配成功再处理 if (matchResult) { const [_, key, index, value] = matchResult; // 如果当前键还没在结果对象里,先初始化一个空对象(用来存索引和值) if (!result[key]) { result[key] = {}; // 如果你更想用数组存储(比如result.Medium[1] = "AAA"),可以改成: // result[key] = []; // 注意:数组索引从0开始,若要对应你的1起始索引,赋值时直接写 result[key][index] = value; 但数组会有索引0的空值 } // 把值赋值到对应的位置 result[key][index] = value; // 如果用数组且要对应1起始索引,直接这样写即可:result[key][index] = value; } }); // 查看最终结果 console.log(result);
最终输出结构
运行上面的代码后,result对象的结构如下,完全符合你想要的MT[1] = "111"、Medium[1] = "AAA"的形式:
{ MT: { '1': '111' }, Medium: { '1': 'AAA', '2': 'BBB', '3': 'CCC', '4': 'DDD' }, bar: { '1': '24', '2': '1,5', '3': '3', '4': '7,5' }, S_Id: { '1': '555' }, S_Nr: { '1': '666' } }
如果你偏好数组形式的存储(比如result.Medium是数组,result.Medium[1]直接取到"AAA"),只需要把代码里初始化的空对象改成空数组就行,不过这样数组的索引0会是undefined,你可以根据实际需求选择。
内容的提问来源于stack exchange,提问作者InFlames82
相关产品推荐
相关产品推荐

