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

如何编写正则匹配句子中不以<<开头、不以>>结尾的单词

原有正则错误原因

你写的/(?!<<)(lorem ipsum)(?!>>)/i存在两个核心问题:

  • 开头的(?!<<)是负向先行断言,校验的是匹配内容后方不是<<,和你需要的「匹配内容前方没有<<」的逻辑完全相反
  • 结尾的(?!>>)仅能排除匹配内容后面直接跟>>的情况,无法排除处于<<>>包裹区间中间位置的匹配项,也就是<<Lorem Ipsum Lorem Ipsum>>里的第一个Lorem Ipsum会被误判为符合要求。

正确解决方案

方案1:零宽断言直接匹配(兼容支持可变长度后顾的正则引擎,如ES2018+ JS、Python、Java 9+等)

正则写法:
/(?<!<<[^>]*)\bLorem Ipsum\b(?![^<]*>>)/gi
各部分逻辑说明:

  • (?<!<<[^>]*):负向后顾断言,校验当前Lorem Ipsum的前方不存在未闭合的<<标签,即当前内容不在任意<<开头的区间内
  • \b:单词边界,避免误匹配嵌入到其他词汇中的目标内容,可根据实际需求取舍
  • Lorem Ipsum:你需要匹配的目标词组
  • (?![^<]*>>):负向先行断言,校验当前Lorem Ipsum的后方不存在>>闭合标签,即当前内容不在任意>>结尾的区间内
  • i标志支持忽略大小写匹配,g标志支持全局检索所有符合要求的结果
    用你提供的示例文本测试,该正则恰好可以匹配到2个符合要求的Lorem Ipsum,和你的预期一致。

方案2:兼容低版本引擎的变通写法

如果你的运行环境不支持可变长度的后顾断言,可以先移除所有<<>>包裹的内容,再在剩余文本中匹配目标词组,逻辑更简单不容易出错,以JS为例:

const originText = "Lorem Ipsum It has survived not only five centuries. <<Lorem Ipsum Lorem Ipsum>> is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing passages, and more recently with desktop publishing software like Aldus PageMaker including versions of."
// 先删除所有<<>>包裹的内容
const filteredText = originText.replace(/<<.*?>>/g, '')
// 匹配所有目标词组
const result = filteredText.match(/\bLorem Ipsum\b/gi)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:36:04