使用正则表达式将 Youtube 频道主页重定向到视频部分

问题描述 投票:0回答:2

我使用 Requestly 制定了一个正则表达式规则,每次我进入 YouTube 频道时,它都会将我重定向到视频部分。我制定的规则是这样的:

/https\:\/\/www\.youtube\.com\/channel\/(.+)/ig

替换为:

https://www.youtube.com/channel/$1/videos

将此作为测试字符串:

https://www.youtube.com/channel/random_name1234

,我明白了:

https://www.youtube.com/channel/random_name1234/videos

当我错误地刷新页面时,问题就出现了。所以,如果 URL 已经是:

https://www.youtube.com/channel/random_name1234/videos

,我得到:

https://www.youtube.com/channel/random_name1234/videos/videos

如果我在频道的播放列表部分并刷新页面,我会得到:

https://www.youtube.com/channel/random_name1234/playlists/videos

如何通过修改正则表达式模式来解决这个问题?我尝试过几次,但失败了,因为我不太擅长正则表达式。

谢谢!

regex
2个回答
3
投票

问题是

.*
将匹配 anything - 包括您是否已经在
/videos
页面或其他一些部分,如
/playlist
/community
等。

您可以通过“仅匹配非正斜杠字符”来使正则表达式更具限制性,以确保相关 URL 实际上是主频道页面。

试试这个:

/https\:\/\/www\.youtube\.com\/channel\/([^\/]+)\/?$/ig
  • [^\/]+
    表示“一个或多个不是正斜杠的字符”。
  • \/?
    表示“可选的正斜杠”,以防 URL 末尾有尾随斜杠。
  • $
    表示“字符串结尾”,因此正则表达式不会匹配较长的 URL,例如
    https://www.youtube.com/channel/xxxxx/about

0
投票

要使用当前链接结构执行此操作,请使用以下脚本:

// ==UserScript==
// @name         YouTube Channel Homepage Redirect to Videos
// @version      1.0
// @description  Redirects YouTube channel homepages to the Videos tab
// @author       You
// @match        https://www.youtube.com/@*
// @match        https://www.youtube.com/c/*
// @match        https://www.youtube.com/user/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

     if (/^https:\/\/www\.youtube\.com\/(c|user|@)[^\/]+\/?$/.test(window.location.href)) {
        window.location.href = window.location.href + "/videos";
    }
})();
© www.soinside.com 2019 - 2024. All rights reserved.