如何在替换之前重复捕获

时间:2018-03-01 11:04:35

标签: regex replace regex-group

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

表达式是:

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

其中:

  • (year)匹配\((\d){4}\)
  • name.of.the.film.匹配([^.]+\.)+(可能是name.of.name.of.the.film.name.of.the.film.

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

[编辑] 如下面的注释中所述,表达式中可能出现几个左括号。我必须在第一个左括号之前替换点。

1 个答案:

答案 0 :(得分:0)

这应符合您的要求:

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

一个点,后面是用左括号终止的任何字符串的正向前瞻。

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

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

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

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