nodejs - 从 url 获取文件名

nodejs - get filename from url

我的 Node.js 脚本中有这种 link:

148414929_307508464041827_8013797938118488137_n.mp4.m4a?_nc_ht=scontent-mxp1-1.cdninstagram.com&_nc_ohc=_--i1eVUUXoAX9lJQ-u&ccb=7-4&oe=60835C8D&oh=61973532a48cb4fb62ac6711e7eba82f&_nc_sid=fa

我正在尝试使用此代码获取名称以将其另存为音频文件,但我无法从 URL:[=15 中获取文件扩展名 .mp4.m4a =]

const filename = path.basename(data.message.voice_media.media.audio.audio_src);

如何获取文件扩展名以正确删除 URL 的最后一部分?我能够保存文件,如果我删除所需扩展名之前的名称部分,它将正常播放。

更新

正如评论中所建议的,我已经阅读了 linked 问题,但就我而言,我不需要只获取文件扩展名,而是 URL 的第一部分已经包含所需的音频扩展,即:148414929_307508464041827_8013797938118488137_n.mp4.m4a.

我推荐使用 URL() constructor(在浏览器和 Node.js 中都有效)因为你可以确定你的 URL 是有效的:

const url = 'https://test.com/path/148414929_307508464041827_8013797938118488137_n.mp4.m4a?_nc_ht=scontent-mxp1-1.cdninstagram.com&_nc_ohc=_--i1eVUUXoAX9lJQ-u&ccb=7-4&oe=60835C8D&oh=61973532a48cb4fb62ac6711e7eba82f&_nc_sid=fa';

let filename = '';
try {
  filename = new URL(url).pathname.split('/').pop();
} catch (e) {
  console.error(e);
}
console.log(`filename: ${filename}`);