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

如何用JavaScript将分号分隔的特定字符串转为JS/JSON对象?

把分号分隔的特殊字符串转成JavaScript对象的实现方案

我来帮你搞定这个字符串转对象的需求!你说的思路完全没问题——先按分号拆分,再提取键名、索引和值,下面是具体的实现步骤和代码:

步骤拆解

  1. 拆分原始字符串:用分号把整个字符串拆分成单个的键值条目,同时过滤掉可能的空条目(比如字符串末尾的分号会产生空项)。
  2. 提取关键信息:每个条目是类似"MT"[1]:"111"的格式,我们用正则表达式来匹配并提取出对象键名(比如MT)、索引(比如1)和对应的值(比如111)。
  3. 构建目标对象:初始化一个空对象,遍历每个条目,把提取到的信息按键名[索引] = 值的结构填充进去。

完整代码示例

// 你的原始输入字符串
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:28:17