我使用 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
如何通过修改正则表达式模式来解决这个问题?我尝试过几次,但失败了,因为我不太擅长正则表达式。
谢谢!
问题是
.*
将匹配 anything - 包括您是否已经在 /videos
页面或其他一些部分,如 /playlist
、/community
等。
您可以通过“仅匹配非正斜杠字符”来使正则表达式更具限制性,以确保相关 URL 实际上是主频道页面。
试试这个:
/https\:\/\/www\.youtube\.com\/channel\/([^\/]+)\/?$/ig
[^\/]+
表示“一个或多个不是正斜杠的字符”。\/?
表示“可选的正斜杠”,以防 URL 末尾有尾随斜杠。$
表示“字符串结尾”,因此正则表达式不会匹配较长的 URL,例如 https://www.youtube.com/channel/xxxxx/about
要使用当前链接结构执行此操作,请使用以下脚本:
// ==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";
}
})();