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

如何用正则表达式提取HH01到HH03的连续数据块?

正则匹配连续多行数据组的问题解决指导

需求与问题描述

你需要从以下多行文本中,提取所有从HH01到HH03的连续数据组:

AB01 88 99 10
HH01 123 123
HH02 123 123
HH03 123 123
XX10 88 99 10
HH01 456 789
HH02 456 789
HH03 456 789
XX10 99 10 11

预期得到的结果是:

groups = [ "HH01 123 123
HH02 123 123
HH03 123 123", "HH01 456 789
HH02 456 789
HH03 456 789" ]

你尝试了正则/HH01(.*)HH03/和/m修饰符,但没能正确处理换行符,下面给你几个关键的解决方向:

核心解决思路

1. 纠正对修饰符的理解

/m修饰符的作用是让^和$匹配每一行的行首和行尾,但它不会让.匹配换行符。要让正则能匹配换行,你有两个选择:

  • 使用[\s\S]、[^]这类可以匹配任意字符(包括换行)的字符集替代.;
  • 如果你的运行环境支持ES2018及以上标准,可以使用/s修饰符,它会让.匹配包括换行在内的所有字符。

2. 使用非贪婪模式避免过度匹配

直接用*会触发贪婪匹配,正则会从第一个HH01一直匹配到最后一个HH03,把中间无关的XX10内容也包含进去。所以必须用*?非贪婪模式,让正则匹配到最近的HH03就停止。

3. 最终可用的正则表达式

基于上面的思路,你可以使用这两个正则中的任意一个:

方案一:兼容所有环境(无需ES2018支持)

const regex = /HH01[\s\S]*?HH03/g;
  • HH01:定位每个数据组的起始标记;
  • [\s\S]*?:匹配任意字符(包括换行),非贪婪模式确保匹配到最近的HH03;
  • g:全局修饰符,确保提取所有符合条件的数据组。

方案二:ES2018+环境可用

const regex = /HH01.*?HH03/sg;
  • /s修饰符让.匹配换行,写法更简洁;
  • *?和g的作用和方案一一致。

4. 提取结果

将正则应用到原始文本后,直接使用match()方法就能得到你想要的数组:

const text = `AB01 88 99 10 
HH01 123 123 
HH02 123 123 
HH03 123 123 
XX10 88 99 10 
HH01 456 789 
HH02 456 789 
HH03 456 789 
XX10 99 10 11`;
const groups = text.match(/HH01[\s\S]*?HH03/g);
console.log(groups);

运行这段代码,就能得到你预期的结果数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:51:47