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

如何用正则表达式匹配无前缀反斜杠的<与>字符?

匹配无前缀反斜杠的 < 和 > 字符

要搞定这个问题,我们可以用负向零宽断言精准排除被反斜杠转义的目标字符,下面给出两种实用的正则方案,适配不同场景:

方案1:基础负向预查(推荐)

用负向零宽后行断言确保目标字符前没有反斜杠,再匹配<或>:

(?<!\\)[<>]

细节解释

  • (?<!\\):负向零宽后行断言,检查当前位置的前一个字符不是反斜杠(正则里反斜杠需要转义,所以写\\)
  • [<>]:直接匹配<或>字符

验证你的示例

对应你给出的字符串 Data1&lt;2,\&lt;,\&gt;,data2&gt;1(实际等价于Data1<2,\<,\>,data2>1):

  • 第一个<前面是1,无反斜杠,会被匹配
  • \<里的<前面是反斜杠,直接排除
  • \>里的>前面是反斜杠,直接排除
  • 最后一个>前面是2,无反斜杠,会被匹配
    完全符合你要求的匹配第6位(<)和第20位(>)的需求。

方案2:处理连续转义场景(进阶)

如果你的字符串里存在连续反斜杠(比如\\<,这里的<实际未被转义,因为第一个反斜杠转义了第二个),可以用更严谨的正则:

(?<!(?<!\\)\\)[<>]

细节解释

这个正则会排除奇数个连续反斜杠后面的</>,只有当</>前面的反斜杠数量为偶数时(即实际未被转义)才会匹配,更贴合真实的转义逻辑。

兼容性替代方案

如果你的开发环境不支持后行断言(比如旧版本JavaScript),可以用正向预查的写法替代:

(?:^|[^\\])([<>])

注意这个写法会把目标字符前的非反斜杠字符(或字符串开头)作为捕获组1,如果你只需要</>本身,直接取第二个捕获组即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:59:36