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

