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

如何使用regex移除XML的CDATA标签内的<>符号避免xml2js解析报错

你之前尝试的正则仅能匹配完整的CDATA片段,无法单独定位到片段内部的<>符号做单独替换,可通过正则配合replace回调实现需求,代码如下:

// 原始XML字符串
const rawXml = `你的XML内容`

// 预处理:仅移除CDATA内部的<和>符号
const processedXml = rawXml.replace(/<!\[CDATA\[(.*?)\]\]>/gs, (_, content) => {
  return `<![CDATA[${content.replace(/[<>]/g, '')}]]>`
})

// 再传入xml2js解析,显式开启CDATA支持避免配置问题
const jsonXml = await require('xml2js').parseStringPromise(processedXml, {
  cdata: true
})

逻辑说明

  • 外层正则/<!\[CDATA\[(.*?)\]\]>/gs会匹配XML中所有的CDATA片段,s修饰符支持匹配跨行的CDATA内容,g修饰符处理所有匹配项
  • 回调函数中仅对CDATA内部的内容做<>符号移除,不会影响XML本身的标签尖括号,不会破坏XML结构
  • 显式给xml2js传入cdata: true配置,确保解析器正确识别CDATA段,避免不必要的解析错误

如果你的场景严格要求不能使用回调函数,只能用单条正则完成替换,受限于JavaScript正则不支持无限长度后向断言,无法直接定位CDATA内部的<>符号做单独替换,上述回调方案是当前环境下最简洁的可行实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:15:02