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

如何用JavaScript将非规范格式字符串转对象并去除空白

JavaScript 实现多行键值对字符串转对象(清理多余空白)

需求场景

将包含多行键值对的字符串(如以下示例)转换为结构清晰的JavaScript对象,同时自动去除键和值周围的多余空白:

输入字符串:

"Allergies: adas 
 other: asdasdfgfdfbfb 
 hola:hola"

目标输出对象:

{
  "Allergies": "adas",
  "other": "asdasdfgfdfbfb",
  "hola": "hola"
}

实现方案

方法一:兼容值含冒号的通用方案

这种方法通过定位每行第一个冒号的位置分割键值,即使值中包含冒号也能正确处理:

const inputStr = `"Allergies: adas 
 other: asdasdfgfdfbfb 
 hola:hola"`;

// 移除输入字符串首尾的引号(若输入自带)
const rawContent = inputStr.replace(/^"|"$/g, '');

// 按换行分割行,过滤空行
const lines = rawContent.split('\n').filter(line => line.trim() !== '');

const result = {};

lines.forEach(line => {
  const colonPos = line.indexOf(':');
  if (colonPos !== -1) {
    // 提取键并清理空白
    const key = line.slice(0, colonPos).trim();
    // 提取值并清理空白
    const value = line.slice(colonPos + 1).trim();
    result[key] = value;
  }
});

// 转换为格式化的JSON字符串(可选)
const formattedJson = JSON.stringify(result, null, 2);

console.log(result);
console.log(formattedJson);

方法二:简洁实现(值不含冒号时适用)

如果可以确定所有值中不包含冒号,可使用更简洁的正则分割方式:

const inputStr = `"Allergies: adas 
 other: asdasdfgfdfbfb 
 hola:hola"`;

const rawContent = inputStr.replace(/^"|"$/g, '');

const result = Object.fromEntries(
  rawContent
    .split('\n')
    .filter(line => line.trim())
    // 按冒号+任意空白分割,再分别清理键值的空白
    .map(line => line.split(/:\s*/).map(item => item.trim()))
);

const formattedJson = JSON.stringify(result, null, 2);

console.log(formattedJson);

关键细节说明

  • trim():自动去除字符串首尾的空格、制表符、换行符等空白字符
  • 空行过滤:通过filter(line => line.trim() !== '')避免处理无效的空行
  • 引号移除:replace(/^"|"$/g, '')用于清理输入字符串首尾的包裹引号(若输入有这层引号)
  • JSON格式化:JSON.stringify(result, null, 2)中的第三个参数2表示用2个空格缩进,让输出更易读

内容的提问来源于stack exchange,提问作者Victor Navarro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:21:13