/GPT

Primary LanguageHTML

GPT

downsrc.js

在给出的html文件中查找src匹配的文件,并将文件保存到本地。保存的路径是以src地址中的directory为路径,filename为文件名。

  1. 使用正则表达式从src提取文件路径。
const srcRegex = /src=['"]([^'"]+\.(png|jpe?g|mp4|pdf))['"]/gi;

这正则表达式是用来从 HTML 标签的 src 属性中提取文件路径的:

  1. src=['"]:匹配 src= 后面紧跟着单引号 ' 或双引号 " 的部分。

  2. ([^'"]+\.(png|jpe?g|mp4|pdf)):这是一个捕获组,用于匹配文件路径,具体解释如下:

    • [^'"]+:匹配任意数量的字符,但不包括单引号 ' 或双引号 ",以保证匹配的是完整的路径。
    • \.:匹配文件扩展名之前的点号。
    • (png|jpe?g|mp4|pdf):一个捕获组,用于匹配文件的扩展名,这里包括了 png、jpeg 或 jpg、mp4、pdf。
  3. ['"]:匹配单引号 ' 或双引号 "

整个正则表达式使用 gi 修饰符:

  • g:表示全局匹配,会匹配到所有符合条件的部分。
  • i:表示不区分大小写,即对大小写不敏感。

这样,使用这个正则表达式,可以从包含 src 属性的 HTML 标签中提取出文件路径。如果有多个匹配,可以通过循环匹配结果数组来获取每个匹配项的文件路径。

  1. 判断src是不是有效文件地址
  var httpRegex = /^(https?:\/\/)?([\w-]+(\.[\w-]+)+)/;

httpRegex 是一个正则表达式,用于匹配 HTTP 或 HTTPS 路径:

  1. ^:表示匹配字符串的开头。
  2. (https?:\/\/)?:这是一个可选的非捕获组,用于匹配 URL 中的 "http://" 或 "https://"。s? 表示 "s" 字符是可选的,:\/\/ 匹配 "://"。
  3. ([\w-]+(\.[\w-]+)+):这是一个捕获组,用于匹配域名部分。具体解释如下:
    • [\w-]+:匹配域名中的一个或多个字母、数字、下划线或短横线。
    • (\.[\w-]+)+:这是一个嵌套的捕获组,用于匹配顶级域名和后面的点加上一个或多个字母、数字、下划线或短横线的组合。整体表示匹配域名中的一个或多个点分隔的部分。
  4. ():捕获组,用于捕获整个匹配的部分,即整个域名部分。

在这个正则表达式中,httpRegex 的目标是匹配 URL 中的 HTTP 或 HTTPS 部分(如果有),以及域名部分。这样,如果匹配成功,你就可以通过访问 match 数组的不同索引来获取捕获的内容,例如 match[0] 获取整个匹配的字符串,match[2] 获取域名部分。

  1. 获取文件流写入本地文件
  https.get(srcUrl, response => {
    response.pipe(fs.createWriteStream(localDir +'/' +path.basename(srcUrl)));
  });  

在 Node.js 中,pipe 是一个用于将可读流(Readable Stream)连接到可写流(Writable Stream)的方法。它的语法如下:

readableStream.pipe(writableStream);

这行代码的作用是将从 readableStream 可读流中读取的数据传输到 writableStream 可写流中。这是一种高效处理流的方式,特别是当你从一个地方读取数据,然后直接将其写入另一个地方时,比如从一个文件读取数据并将其写入另一个文件。

response.pipe(fs.createWriteStream(localDir + '/' + path.basename(srcUrl)));
  • response 是一个可读流,它从某个 HTTP 请求获取的。
  • fs.createWriteStream(localDir + '/' + path.basename(srcUrl)) 创建了一个可写流,它将数据写入文件系统中指定路径的文件。

通过 pipe 方法,response 流中的数据被传输到文件系统中的文件中。这是一种常见的用法,特别是在处理大量数据时,因为它有效地控制了内存的使用。