【问题标题】:auto download mp3 in tampermonkey using regex使用正则表达式在 Tampermonkey 中自动下载 mp3
【发布时间】:2019-04-20 19:37:56
【问题描述】:

我想在使用 Tampermonkey 和正则表达式访问特定网站时自动下载 mp3 问题是,当我使用正则表达式时,它无法下载 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.mp3http://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>

【问题讨论】:

  • 我认为我们需要查看GM_download() 的代码。
  • 它可以在不使用正则表达式的情况下工作,但是当我使用正则表达式时不起作用。我认为我的正则表达式有问题。谢谢!
  • @TimBiegeleisen, GM_download 是 Tampermonkey 提供的内置函数。但是这个问题确实需要一个合适的 MCVE。
  • djsoda,您需要链接到实际页面或显示包含 mp3 的 HTML 结构。您将使用 HTML 结构,也许 i> 之后的一些正则表达式,以获取正确的 URL。

标签: javascript regex tampermonkey


【解决方案1】:

首先,我会走非贪婪的路线。你想消耗尽可能少的量。您还应该专门查找要捕获的字符串末尾的文件扩展名.mp3

然后我的下一个观察是众多捕获组 - 您只需要一个捕获组即可获取整个 URL。

(https?:\/\/.*?\/mp3\/.*?\/.*?\.mp3)

regex101查看它

我最后的观察是你使用的是字符串锚^$。在您的输入字符串中,如果您要查找的 url 已经在字符串 ^ 的开头之后并且在字符串 $ 的结尾之前,那么您首先不需要正则表达式。

如果您的网址始终与您提供的格式相同,那么您甚至可以更上一层楼:

(\bhttps?:\/\/(?:\d+\.?){4}\/mp3(?:\/\d+){2}\/[\w+-]+?\.mp3\b)

这将确保所有子文件夹都在文件夹\mp3\下,您可以看到here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2018-06-24
  • 2020-09-14
  • 2014-12-05
相关资源
最近更新 更多