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

JS如何根据指定单词索引查找距离最近的正则匹配时间模式

实现方案

你原有代码的问题在于正则仅能匹配单个时间片段,且未开启全局匹配,只能拿到第一个符合规则的结果。你可以按照以下逻辑实现需求:

  1. 修正正则表达式,匹配完整的时间行,同时开启全局匹配
  2. 遍历所有匹配项,记录每个匹配项的起始索引
  3. 筛选出索引小于目标单词索引的所有匹配项,取起始索引最大的那一项,就是你要的距离最近的向前时间模式

可直接运行的代码

// st替换为你的完整字幕文本内容
const st = `"1
00:01:46,356 --> 00:01:49,893
What is this? It's blue.

2
00:01:50,794 --> 00:01:54,998
We used a different chemical process,
but it is every bit as pure.

3
00:01:55,199 --> 00:01:58,267
It may be blue, but it's the bomb."`;
// 单词chemical对应的索引位置
const targetWordIndex = 107;
// 匹配完整时间行的正则,g为全局匹配修饰符
const timeRule = /\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}/g;

let matchResult;
let nearestTimeLine = null;
let maxValidIndex = -1;

// 循环遍历所有匹配项
while ((matchResult = timeRule.exec(st)) !== null) {
    // 仅保留索引小于目标单词索引的匹配项,同时更新最大有效索引
    if (matchResult.index < targetWordIndex && matchResult.index > maxValidIndex) {
        maxValidIndex = matchResult.index;
        nearestTimeLine = matchResult[0];
    }
}

console.log(nearestTimeLine); // 输出结果:00:01:50,794 --> 00:01:54,998

代码说明

  • 正则里的\d{2}等价于[0-9][0-9],写法更简洁
  • exec方法每次执行会返回当前匹配项的内容和起始索引,全局匹配模式下多次调用会依次向后查找
  • 遍历过程中我们只保留距离目标索引最近的前一个匹配项,最终得到的就是预期结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:36:08