我想使用Tampermonkey和regex在特定网站上访问时自动下载mp3,问题是当我使用regex时无法下载mp3,但是当我在“ var arg”中使用常规URL时,它会自动下载mp3。我想在访问网站时自动下载mp3,并将mp3与原始文件名保存为网站上的文件名相同。
以下是示例网址:http://188.138.xx.xxx/mp3/12/45/song_mp3_6612.mp3
。
这是我的示例javascript
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @include http://*/mp3*
// @grant GM_download
// ==/UserScript==
var regex = /^(http:\/\/)(.*)(\/mp3\/.*\/)(.*)$/i;
var arg = { url: regex,
name: "get the filename from orignal filename in regex.mp3"
};
GM_download(arg);
当我直接使用而不使用正则表达式时,它会起作用
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @include http://*/mp3*
// @grant GM_download
// ==/UserScript==
var arg = { url: "http://188.138.xx.xxx/mp3/12/45/song_mp3_6612.mp3",
name: "song.mp3"
};
GM_download(arg);
这是另一个示例链接 这是另一个链接示例:http://62.75.xxx.xx/mp3/5/7e/dj_snake_taki_taki_ft._selena_gomez_ozuna_cardi_b_mp3_17376.mp3 http://188.138.xxx.xxx/mp3/7/d1/rayvanny_ft_diamond_platnumz_mwanza_official_music_video_mp3_19403.mp3 http://188.138.xxx.xxx/mp3/b/52/bad_bunny_feat._drake_mia_video_oficial_mp3_21130.mp3
我尝试了那些正则表达式,但在tampermonkey中找不到它
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @include http://*/mp3*
// @grant GM_download
// ==/UserScript==
var regex = /(\bhttps?:\/\/(?:\d+\.?){4}\/mp3(?:\/[a-z0-9]+)\/[a-z0-9]+\/[.\w+-]+?\.mp3\b)/;
var arg = { url: regex,
name: "filename.mp3"
};
GM_download(arg);
这是html元素
<html>
<head>
<meta name="viewport" content="width=device-width">
</head>
<body style="margin: 0px;">
<video controls="" autoplay="" name="media">
<source src="http://188.138.xxx.xxx/mp3/b/52/bad_bunny_feat._drake_mia_video_oficial_mp3_21130.mp3" type="audio/mpeg">
</video>
</body>
</html>
答案 0 :(得分:1)
首先,我要走非贪婪路线。您要消耗最少的量。您还应该专门在要捕获的字符串的末尾查找文件扩展名.mp3
。
然后我的下一个观察结果是多个捕获组-您只需要一个捕获组即可获取整个URL。
(https?:\/\/.*?\/mp3\/.*?\/.*?\.mp3)
在regex101上查看
我的最终观察结果是您正在使用字符串锚点^
和$
。在您输入的字符串中,如果您要查找的URL已经在字符串^
的开头之后和字符串$
的结尾之前,那么您不需要在第一个字符串中使用regex地方。
如果您的网址始终与您提供的格式相同,那么您甚至可以将其向上移动:
(\bhttps?:\/\/(?:\d+\.?){4}\/mp3(?:\/\d+){2}\/[\w+-]+?\.mp3\b)
这将确保所有子文件夹都位于文件夹\mp3\
下,您可以看到here。