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

如何用正则表达式替换XML属性中的未转义嵌套双引号?

用正则转义XML属性中的嵌套双引号

当然可以实现!不过得精准锁定属性值内部的未转义双引号——毕竟我们不能把属性的起始/结束引号也给转义了。

解决方案

我们可以用正向预查来限定匹配范围,确保只替换属性值里的嵌套引号:

正则表达式

(?<="[^"]*)"(?=[^"]*")

替换目标

&amp;quot;

正则逻辑拆解

让我们拆解一下这个正则的各个部分,明白它为什么能精准匹配:

  • (?<="[^"]*):正向后顾,确保当前引号的前面是属性的起始引号",并且已经进入了属性值内部(跟着0个或多个非引号字符)
  • ":就是我们要找的、需要转义的嵌套双引号
  • (?=[^"]*"):正向前瞻,确保当前引号的后面会跟着属性的结束引号"(中间是0个或多个非引号字符)

示例代码(JavaScript)

const originalXml = '<test> <tag1 att1="This has "nested double quotes""> <tag2 att2="This also has a nested " double quotes"></tag2> </tag1> </test>';
const escapedXml = originalXml.replace(/(?<="[^"]*)"(?=[^"]*")/g, '&amp;quot;');
console.log(escapedXml);

运行后输出的结果就是你想要的:

<test> <tag1 att1="This has &amp;quot;nested double quotes&amp;quot;"> <tag2 att2="This also has a nested &amp;quot; double quotes"></tag2> </tag1> </test>

注意事项

  1. 这个正则仅适用于双引号包裹属性值的场景,如果你的XML里存在单引号属性,需要单独调整规则。
  2. 正则处理XML有天然局限性:如果遇到CDATA块、注释里的引号,或者属性值本身已经包含转义实体的情况,正则可能会误匹配。如果是生产环境的复杂XML,更推荐用专业的XML解析库(比如Python的xml.etree、Java的DOM解析器)来处理——毕竟正则不是为解析XML设计的,但针对你给出的简单场景,这个方案完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:17:42