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

JavaScript中如何正确分割含单双引号的字符串以完整提取HTML值?

解决包含特殊字符的^分隔键值对字符串分割问题

嘿,我太懂你现在碰到的麻烦了——用普通的split方法处理带单双引号的HTML内容时,job_description的值总是被截断,根本拿不到完整的内容。这是因为简单的split没法智能区分分隔符^到底是键值对之间的分隔,还是值里面的内容(哪怕你的例子里值没包含^,原代码的split('=')也会在值里有=的时候直接炸锅)。

别担心,我们换个思路:用正则表达式精准匹配每个完整的键=值单元,不管值里有单双引号、特殊字符都能完整捕获。下面是修改后的代码:

var string = 'job_category=IT^job_description=<p><span style="font-size: 18px;">Many other html attribute\'s </span></p>^job_type=2^qualification=2^EQ'; 

function get_json_from_string(x) { 
  var ob = {}; 
  // 正则匹配规则:捕获键名 + 等号 + 完整值(直到下一个^或字符串结束)
  var keyValueRegex = /([^\^=]+)=([^\^]*)(?=\^|$)/g;
  let matchResult;
  // 循环匹配所有键值对
  while ((matchResult = keyValueRegex.exec(x)) !== null) {
    const key = matchResult[1];
    const value = matchResult[2];
    ob[key] = value;
  }
  return ob; 
} 

var finalOutput = get_json_from_string(string); 
console.log(finalOutput.job_description);
// 输出完整内容:<p><span style="font-size: 18px;">Many other html attribute's </span></p>

正则规则解释

  • ([^\^=]+):匹配键名,只捕获**不是^和=**的字符,确保不会把值里的内容误当成键的一部分
  • =:精准匹配键和值之间的分隔符
  • ([^\^]*):匹配完整的值,捕获直到下一个^或字符串结尾的所有内容,不管里面有单双引号还是其他特殊字符
  • (?=\^|$):正向预查,确保我们匹配的结束位置是下一个^或者字符串末尾,不会多匹配也不会漏内容

为什么原代码会出问题?

原代码先通过split('^')拆分整个字符串,再对每个片段用split('=')拆分键和值。这种方式的致命问题是:如果值里包含=字符(比如HTML属性里的style="width=100px"),split('=')会直接把值拆成多个部分,导致你只能拿到=之前的半截内容。而用正则匹配的方式,就能完美避开这个坑。

内容的提问来源于stack exchange,提问作者Mr world wide

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:53:42