遗憾的是,没有简单的方法可以将 Python 正则表达式转换为 Javascript 正则表达式,因为 Python 正则表达式比 Javascript 正则表达式更强大。
Javascript 缺少功能性的东西,例如负向查找和递归,但它缺少更多的语法工具,例如详细语法和命名捕获组。
常规捕获组 =()
命名捕获组=(?P<ThisIsAName>)
详细正则表达式 ='find me #this regex ignores comments and whitespace'
非详细正则表达式='this treats whitespace literally'
因此,如果我们将您的命名捕获组转换为常规(编号)捕获组
如果我们将详细语法转换为常规语法。
那么该正则表达式将是有效的 Javascript 正则表达式,在 Javascript 中将如下所示:
regex =
/^((.*[^ (_.])[ (_.]+((\d{4})([ (_.]+S(\d{1,2})E(\d{1,2}))?|(?<!\d{4}[ (_.])S(\d{1,2})E(\d{1,2})|(\d{3}))|(.+))/
// group 2 = ShowNameA
// group 4 = ShowYearA
// group 6 = SeasonB
// group 7 = EpisodeC
// group 8 = ShowNameB
正如您所看到的,Javascript 版本非常丑陋,因为它没有详细的语法或命名的捕获组。然而在这种情况下功能是等价的。
Javascript 没有与 findall 直接等效的函数,因此您必须创建/查找与 findall 等效的函数。这是一篇文章解释了几种这样的方法。https://www.activestate.com/blog/2008/04/javascript-refindall-workalike https://www.activestate.com/blog/2008/04/javascript-refindall-workalike
未来我也强烈推荐去 regexr.com 学习正则表达式,特别是 javascript 正则表达式。