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

正则表达式需求:匹配属性内转义字符并替换<为&lt;

解决name/author属性内<字符转义问题

要只针对name和author属性值里的<字符进行转义(替换为&lt;),可以用精准匹配目标属性+局部替换的方案,避免误匹配其他属性。

核心思路

  1. 先匹配所有name="..."、name='...'、author="..."、author='...'格式的属性
  2. 对每个匹配到的属性值部分,单独替换其中的<为&lt;
  3. 将替换后的属性拼回原字符串

正则表达式与实现代码

以JavaScript为例,代码如下:

// 原始待处理字符串
const rawStr = `&lt;info type=&quot;map&quot; name=&quot;Double quotes test name &lt; test&quot; author=&quot;Escape &lt; character&quot;&gt;&lt;/info&gt;
&lt;info type=&quot;map&quot; name='Test name with single quotes &lt; test' author='Escape &lt; character'&gt;&lt;/info&gt;`;

// 处理逻辑
const processedStr = rawStr.replace(
  /(name|author)\s*=\s*(["'])(.*?)\2/g,
  (fullMatch, propName, quote, propValue) => {
    // 仅替换属性值里的<字符
    const escapedValue = propValue.replace(/</g, '&lt;');
    // 拼接回完整属性格式
    return `${propName}=${quote}${escapedValue}${quote}`;
  }
);

console.log(processedStr);

正则各部分说明

  • (name|author):精准匹配目标属性名,确保只处理name/author
  • \s*=\s*:匹配属性名后的等号,兼容等号前后的空格
  • (["']):捕获属性值的包裹引号(单/双引号都支持),用分组2记录
  • (.*?):非贪婪匹配属性值内容,避免跨属性匹配(比如不会从第一个引号一直匹配到最后一个引号)
  • \2:匹配与分组2相同的引号,确保属性值闭合

为什么你的原有正则不对

你之前的正则/(?!author|name\s*=\s*)(?:\'[^']*\')/g逻辑方向错误:它是排除name/author属性,反而匹配其他单引号包裹的属性值,完全和需求相反,自然会误匹配非目标属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:35:22