如何在替换字符之前重复捕获

How to repeat capture before a caracter for replacement

我花了最后两天时间找到一个正则表达式,用下划线替换左括号前的每个点。

表达式为:

name.of.the.film.(year).codec.quality. ... .extension

其中:

我试过 ^(([^.]+(\.))+)\( 我能够捕获括号前的最后一个点,因为据我所知,重复捕获只会保留最后一个匹配项。但是如何捕获每个点匹配。

[编辑] 正如下面评论中提到的,表达式中可以出现几个左括号。我必须替换 first 左括号之前的点。

这应该符合您要查找的内容:

/[.](?=.*\()/g

一个点,后跟任何以左括号结尾的字符串的正向先行。

替换演示:https://regex101.com/r/PEur1t/1

编辑:如果括号中多次出现字符串,这可能不会给出预期的结果,因为它将替换每个点,直到最后一个左括号。因为在没有任何其他假设的情况下很难成功地理解哪一个是所需的,所以我现在假设年份将是一个四位数的字符串:

/[.](?=.*\(\d{4})/g

演示:https://regex101.com/r/PEur1t/2