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

React/TypeScript中如何将字符串中的JS变量解析为JSON

React-Native/TypeScript 解析含特殊字符的JS键值对字符串为JSON

问题场景

你拿到的是单行无换行的字符串,由;分隔的多组键值对组成,部分值被双引号包裹,且引号内可能包含空格或;,键没有引号,无法直接用JSON.parse解析,之前的正则无法处理值内的;。

解决方案

1. 正确匹配键值对的正则

使用能区分双引号内内容的正则,避免把引号里的;当成键值对分隔符:

/([^=]+)=("(?:[^"\\]|\\.)*"|[^;]+)/g
  • ([^=]+):匹配等号前的键(不含等号)
  • =:匹配键值分隔符
  • ("(?:[^"\\]|\\.)*"|[^;]+):匹配值,优先匹配双引号包裹的内容(支持转义引号),其次匹配无引号的内容(直到下一个;)

2. TypeScript代码实现解析并转JSON

// 示例输入字符串
const rawData = 'SomeInfo="hello; world";AnotherKey=123;ThirdKey="foo\\"bar"';

const keyValueRegex = /([^=]+)=("(?:[^"\\]|\\.)*"|[^;]+)/g;
const parsedObj: Record<string, string | number> = {};

let matchResult: RegExpExecArray | null;
while ((matchResult = keyValueRegex.exec(rawData)) !== null) {
  // 处理键:去除前后空格
  const key = matchResult[1].trim();
  // 处理值
  let value = matchResult[2].trim();
  
  // 去掉值的双引号(如果有),并处理转义引号
  if (value.startsWith('"') && value.endsWith('"')) {
    value = value.slice(1, -1).replace(/\\"/g, '"');
  }
  // 尝试转成数字(可选,根据你的数据类型需求)
  else if (!isNaN(Number(value))) {
    value = Number(value);
  }
  
  parsedObj[key] = value;
}

// 转成标准JSON字符串
const jsonString = JSON.stringify(parsedObj);
console.log(jsonString);

3. 关键逻辑说明

  • 循环匹配所有键值对,避免遗漏
  • 自动处理带引号的值,包括转义的双引号
  • 可选的数字类型转换(如果你的值包含数字)
  • 最终生成的对象可以直接用JSON.stringify转成标准JSON,自动给键加上引号

为什么之前的正则失效?

你之前用的/([^=]+)=([^;]+)/gm会把值里的;当成键值对的分隔符,导致值被截断;而新正则优先匹配双引号内的完整内容,不会误分割。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:20:27