在 Angular 代理中匹配各种 URL 的正则表达式

Regular expression matching various URL in an Angular proxy

在我的 Angular 应用程序中,我有一个代理,因此我可以绕过 YouTube 视频的 CORS 问题。

这是我的代理:

{
    "\/api": {
      "target": "https://r1---sn-25ge7nsl.googlevideo.com",
      "secure": true,
      "changeOrigin": true,
      "logLevel": "debug",
      "pathRewrite": {
        "^\/api": "/"
      }
    }
 }

我的目标是从后端的 python 应用程序获取的 YouTube 源视频。但是除了这部分之外,每个源头都是相同的:

"https://"xxxxxxxxxxx".googlevideo.com" 

例如:

"https://r1---sn-25ge7jsl.googlevideo.com"
"https://r2---sn-25ge7ns4.googlevideo.com"
"https://r8---sn-25ge7nsl.googlevideo.com"

我认为正则表达式可以帮助我拥有一个可以匹配任何其他目标的单一目标。我做了一些研究,发现每个匹配的字符都是 /.*/,我该如何重写我的目标?

你可以试试这个模式:

https:\/\/.+\.googlevideo\.com

第一部分 https:\/\/ 将查找以 https:// 开头的字符串。反斜杠是为了避开正斜杠。根据您使用的正则表达式的风格(我不熟悉 Angular),您可能需要也可能不需要这些反斜杠。

下一部分 .+ 匹配任何字符的 一个或多个 实例。如果将 + 替换为贪心 *,它将匹配 零个或多个 任何字符实例。

模式的最后一部分 \.googlevideo\.com 将匹配以 .googlevideo.com 结尾的字符串。再次注意使用反斜杠来转义句号。您需要在此处使用这些反斜杠,否则此模式将匹配任何字符的实例,从而使类似这样的内容有效:fgooglevideo5com.

如果你想更进一步,你可以尝试这样的事情:

https:\/\/.{2}---.{2}-.{8}\.googlevideo\.com

.{2}---.{2}-.{8} 匹配任意两个字符后接三个连字符,再接两个字符,再接一个连字符,再接八个字符。