如何在替换字符之前重复捕获
How to repeat capture before a caracter for replacement
我花了最后两天时间找到一个正则表达式,用下划线替换左括号前的每个点。
表达式为:
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.
)
我试过 ^(([^.]+(\.))+)\(
我能够捕获括号前的最后一个点,因为据我所知,重复捕获只会保留最后一个匹配项。但是如何捕获每个点匹配。
[编辑]
正如下面评论中提到的,表达式中可以出现几个左括号。我必须替换 first 左括号之前的点。
这应该符合您要查找的内容:
/[.](?=.*\()/g
一个点,后跟任何以左括号结尾的字符串的正向先行。
替换演示:https://regex101.com/r/PEur1t/1
编辑:如果括号中多次出现字符串,这可能不会给出预期的结果,因为它将替换每个点,直到最后一个左括号。因为在没有任何其他假设的情况下很难成功地理解哪一个是所需的,所以我现在假设年份将是一个四位数的字符串:
/[.](?=.*\(\d{4})/g
我花了最后两天时间找到一个正则表达式,用下划线替换左括号前的每个点。
表达式为:
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.
)
我试过 ^(([^.]+(\.))+)\(
我能够捕获括号前的最后一个点,因为据我所知,重复捕获只会保留最后一个匹配项。但是如何捕获每个点匹配。
[编辑] 正如下面评论中提到的,表达式中可以出现几个左括号。我必须替换 first 左括号之前的点。
这应该符合您要查找的内容:
/[.](?=.*\()/g
一个点,后跟任何以左括号结尾的字符串的正向先行。
替换演示:https://regex101.com/r/PEur1t/1
编辑:如果括号中多次出现字符串,这可能不会给出预期的结果,因为它将替换每个点,直到最后一个左括号。因为在没有任何其他假设的情况下很难成功地理解哪一个是所需的,所以我现在假设年份将是一个四位数的字符串:
/[.](?=.*\(\d{4})/g