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

如何合并正则表达式提取日志指定前后数据并实现JS批量提取?

日志数据提取:合并正则并生成指定格式列表

问题描述

我有一份包含数据的日志文件,需要提取特定表达式前后的数据。日志示例行如下:

Aug 23 07:25:43 Astrance 125_Heater_1.30.02.0124_d[11421]: 2023-08-23T07:25:43.402421|304|4|1250025|virtual bool CReadTempStep::SPIIsSatisfied():129|Temperatures 39.998318 39.982665 40.167597 40.167027

我需要提取开头的时间戳 Aug 23 07:25:43 和末尾的四个数值 39.998318 39.982665 40.167597 40.167027。目前已用JavaScript写出两个正则:

  • 提取时间戳的正则:.*(?= Astrance.*Temperatures)
  • 提取四个数值的正则:(?<= Astrance.*Temperatures).*

需求

如何将这两个正则合并为单个正则实现一次匹配?同时希望得到一个JavaScript程序,将所有匹配结果生成为如下格式的列表:

MatchList = [
   [ 'Aug 23 07:25:43', '39.998318 39.982665 40.167597 40.167027' ],
   [ 'Aug 23 07:25:45', '39.999999 39.576576 40.676767 40.334444' ],
   [ 'Aug 23 07:25:47', '39.456777 39.734534 40.898899 40.898999' ],
    ...
]

解决方案

完整代码实现

// 读取本地日志文件到变量
const fs = require("fs");
const logFileString = fs.readFileSync("./sys", "utf-8");

// 使用合并后的正则提取数据并生成指定格式列表
const regex = /^(.*?)\s*Astrance.*Temperatures\s*(.*)/gm;
const matches = Array.from([...logFileString.matchAll(regex)], x => [x[1], x[2]]);

console.log(matches);

正则说明

合并后的正则 /^(.*?)\s*Astrance.*Temperatures\s*(.*)/gm 各部分作用:

  • ^:匹配行首,确保从每行开头开始匹配
  • (.*?):非贪婪匹配时间戳内容,作为第一个捕获组
  • \s*Astrance.*Temperatures:匹配中间的固定标识及内容,起到分隔作用
  • \s*(.*):匹配Temperatures后的四个数值内容,作为第二个捕获组
  • gm:全局匹配(g)+ 多行模式(m),确保处理日志中的每一行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:42:57