regex 提取url中的曲目名称

6ovsh4lw  于 2023-05-19  发布在  其他
关注(0)|答案(4)|浏览(92)

假设我们有这样URL:

const a = 'https://www.example.com/media/english/exaProns/p008-001600778.mp3?version=1.2.60'

我们如何提取轨道的名称,如:

p008-001600778.mp3

我把URL分了两次。one with /一个with?.但应该有更好的解决办法。

8oomwypt

8oomwypt1#

我建议使用URL#pathname安全地删除?之后的所有额外部分,然后您可以使用regex删除最后一个/之前的所有内容

const url = "https://www.example.com/media/english/exaProns/p008-001600778.mp3?version=1.2.60"

const clearURL = new URL(url).pathname;
// get the core part of the url (removes the origin and the search params)
console.log(clearURL);

const fileName = clearURL.replace(/.*\//, "");
// remove everything before the last slash
console.log(fileName);

我没有使用一个大型正则表达式的原因是
1.这样更容易理解
1.如果url格式不正确并且路径名中包含另一个?,则更安全

2ul0zpep

2ul0zpep2#

如果你想不费太多力气就能得到一致的结果,你可以使用URL constructor,然后让它提取pathname。之后,只需将/pop拆分为最后一个:

const url = new URL( 'https://www.example.com/media/english/exaProns/p008-001600778.mp3?version=1.2.60' );

console.log( url.pathname.split( '/' ).pop() );

URL构造函数只是为您提供了实际URL的更简单的分解,允许您以与浏览器相同的方式操作它。

ar5n3qh5

ar5n3qh53#

如果你的url的结构是相同的,并且只跟踪名称的变化,你可以使用这个regex模式:

/([^\/]+(?=\?))/

它提取最后/?之间的部分
就像这样:

const trackName = url.match(/([^\/]+(?=\?))/)[0];
siv3szwd

siv3szwd4#

在JavaScript中,您可以使用URL API来解析URL,然后提取路径名。这将给予你的路径部分的网址,它遵循域部分的第一个'?'或'#'字符。然后,您可以通过'/'分割路径名,并获取最后一个元素以获取文件名。
下面是一个例子:

const a = 'https://www.example.com/media/english/exaProns/p008-001600778.mp3?version=1.2.60';

const url = new URL(a);
const pathName = url.pathname;
const pathParts = pathName.split('/');
const fileName = pathParts[pathParts.length - 1];

console.log(fileName); // outputs: p008-001600778.mp3

在这段代码中:
1.我们首先从字符串a创建一个URL对象。这个对象允许我们轻松地提取URL的不同部分。
1.然后我们得到URL的路径名,这是从域到第一个'的URL的一部分?'或'#'字符。
1.接下来,我们使用'/'作为分隔符将此路径名拆分为各个部分。这给了我们一个字符串数组。
1.最后,我们从这个数组中获得最后一个元素,即文件名。

相关问题