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

如何用正则表达式将以Terms:开头的段落匹配为独立分组

解决正则匹配独立段落的问题

你的核心需求是把每个以Terms:开头、以两个及以上换行符结尾的段落作为独立匹配结果返回,当前的正则/(terms:).*(\n)*/gim存在几个关键问题,我们来一步步修正:

问题分析

  1. .不匹配换行符:默认情况下,正则中的.不会匹配换行符,即使加了m修饰符(m只是改变^和$的匹配范围,让它们匹配行首/行尾,而非整个文本的首尾),所以.*只能匹配Terms:所在行的内容,无法跨多行捕获整个段落。
  2. 贪婪匹配导致范围错误:.*是贪婪模式,会尽可能匹配更多内容,加上没有正确的终止条件,会导致无法正确分割不同的段落。
  3. 换行匹配逻辑不完善:(\n)*只是匹配任意数量的换行,但没有明确界定“段落结束”的标志(两个及以上换行)。

修正后的正则表达式

/Terms:.*?(?=\n{2,}|$)/gsi

各部分解释

  • Terms::匹配段落的起始标识,配合i修饰符支持大小写不敏感匹配(和你原需求一致)。
  • .*?:非贪婪匹配任意字符(包括换行,因为加了s修饰符),确保匹配到段落结束标志就停止,不会过度匹配到下一个段落。
  • (?=\n{2,}|$):正向预查断言,用来界定段落的结束位置——要么是两个及以上的换行符,要么是文本的末尾(处理最后一段没有后续换行的情况)。
  • g:全局匹配,找到所有符合条件的段落。
  • s:让.匹配换行符,实现跨多行捕获整个段落。
  • i:大小写不敏感,匹配terms:、Terms:等各种写法。

示例测试(以JavaScript为例)

const inputText = `Terms: 1
I've got the {name} and {term}
So I would like to go
But not return


Terms: 2
I've got the {name} and {term}
So I would like to go
But not return


Terms: 3
I've got the {name} and {term}
So I would like to go
But not return`;

const regex = /Terms:.*?(?=\n{2,}|$)/gsi;
const paragraphs = inputText.match(regex);

console.log(paragraphs);

运行后会得到一个数组,每个元素就是一个独立的Terms:段落,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:06:17