【问题标题】:Replace string between two time values替换两个时间值之间的字符串
【发布时间】:2022-11-23 06:31:52
【问题描述】:

我正在尝试清理损坏的 VTT 文件,其中的行显示: 00:00.000 -- constituent 00:06.880 但应该显示 00:00.000 --> 00:06.880

VTT 是这样写的,它是 MM:SS:MSMSMS,分钟可以是任何值,所以我尝试使用 ^\d+\:\d+\.\d+$ 通过正则表达式来匹配它,这显然应该可以工作,并且在一些正则表达式测试位置它首先匹配,但后来当我向字符串添加其他内容时,匹配失败。

我怎样才能得到这两个匹配项之间的字符串,以便我可以用 --> 替换它?这里的词 (constituent) 是可变的,所以我需要一个通用的正则表达式,而不仅仅是字符串的匹配和替换。谢谢!

【问题讨论】:

    标签: javascript node.js regex webvtt


    【解决方案1】:

    您可以使用此正则表达式并替换代码:

    const input = `
    1
    00:00.000 -- constituent 00:06.880
    
    2
    00:30.022 test-test 00:37.750`;
    
    const result = input.replace(/^(d[d:.]+d).*?(d[d:.]+d)$/gm, "$1 --> $2");
    
    console.log(result);

    【讨论】:

    • 唯一的问题是不能保证它会以 -- word 的格式出现,所以我希望只匹配这两个时间值内的任何内容并替换为 ` --> `
    • 你是说 -- 也可能不存在吗?
    • 是的,使用正则表达式测试器似乎我可以删除这两个破折号并且它会正常工作,非常感谢!这就是我正在做的事情,你解除了我的封锁并帮助这个 OSS 项目向前发展哈哈:github.com/mayeaux/generate-subtitles
    • 好的,更新了我的答案。
    【解决方案2】:

    试试这个:^(d+[d:.]+d+)([-a-zs]+)(d+[d:.]+d+)$

    演示在这里:https://regex101.com/r/2nLCut/1

    第1组和第3组是时间,2组是捕获的变量(这意味着你可以用第1组和第3组替换整个匹配以消除第2组中的字符串)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      相关资源
      最近更新 更多