如何用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
相关产品推荐
相关产品推荐

