获取URL的最后一段

3

假设这是我在输入框中编写的URL /链接

https://www.instagram.com/p/CBt-W4jHZjH/

我该如何获取“CBt-W4jHZjH”部分?

var link = ?????

var a = link.val().trim();
var regex = new RegExp(/^(?!.*\.\.)(?!.*\.$)[^\W][\w.]{0,29}$/);
var validation = regex.test(a);

2
'https://www.instagram.com/p/CBt-W4jHZjH/'.match(/\/([^/]+)\/$/)[1] - Yevhen Horbunkov
2个回答

2
有很多方法可以做到这一点。其中一种方法是寻找/除了 / 以外的任何字符,以/结束,并跟随行末。

var url = 'https://www.instagram.com/p/CBt-W4jHZjH/'
var x = new URL(url);
console.log(x.pathname.match(/\/([^\/]+)\/?$/)[1])

可以使用split函数完成。过滤器会删除由结尾的/引起的空字符串。

var url = 'https://www.instagram.com/p/CBt-W4jHZjH/'
var x = new URL(url);
console.log(x.pathname.split('/').filter(x=>x).pop());


仅为了一个 pathname 属性,使用 URL API 真的值得吗?为什么不直接将 match() 应用于 URL 字符串呢?而且在方括号内部不需要转义斜杠,它应该可以正常工作。 - Yevhen Horbunkov
@YevgenGorbunkov 是的,可以对字符串进行操作。但我喜欢 URL 的方式。 - epascarello
我一直在想另一种让它变得花哨的方法(const [,hash] = .match(/\/([^/]+)\/$/)), 但后来变懒了,就在OP下面留了一个丑陋的评论 ;) - Yevhen Horbunkov

2

https://developer.mozilla.org/en-US/docs/Web/API/URL

const getLastPath = (url) => {
  url = new URL(url);
  const pathname = url.pathname; 
  const paths = pathname.split("/"); 
  return paths.pop() || paths.pop();
}


console.log(getLastPath("https://www.instagram.com/p/CBt-W4jHZjH/")); // "CBt-W4jHZjH"
console.log(getLastPath("https://www.instagram.com/p/CBt-W4jHZjH"));  // "CBt-W4jHZjH"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接