【问题标题】:Javascript - get current page URL without pagination numbersJavascript - 获取没有分页号的当前页面 URL
【发布时间】:2011-10-24 13:07:40
【问题描述】:

假设我有一篇文章的 URL:

http://domain.com/blog/articles/title-here/

它有大约 5 页,所以当你浏览每一页时,你会得到:

http://domain.com/blog/articles/title-here/http://domain.com/blog/articles/title-here/1

http://domain.com/blog/articles/title-here/2

http://domain.com/blog/articles/title-here/3

http://domain.com/blog/articles/title-here/4

http://domain.com/blog/articles/title-here/5

我知道以下代码将获取完整的当前 URL(也就是包括页面 #):

var u = window.location.href;

但是有没有办法限制它,使页面#不是变量“u”的一部分?

也许有一个正则表达式或我应该在那里添加的东西..? (我对 javascript 还很陌生,所以不知道如何应用它?)

【问题讨论】:

    标签: javascript regex variables url


    【解决方案1】:

    正则表达式会做到这一点。但是在这种情况下,你可以把它变成一个数组,去掉最后的元素,然后重新序列化它。

    var a = 'http://domain.com/blog/articles/title-here/2'.split('/');
    a.splice(-1, 1);
    a.join('/');
    

    【讨论】:

      【解决方案2】:
      var u = window.location.href.match(/.*[/][^\d]*/)[0]
      

      这对你有用吗?

      编辑

      我改变了它......再次:P

      【讨论】:

      • 与其将/ 放在字符类中,不如将其转义\/
      • 只是出于好奇:像http://.*/ 这样的东西在这个例子中也有用吗?
      • @NullUserException 我知道......我个人偏好。只是让我更容易阅读。
      • @GNi33 刚刚测试过,只要您将/s 转义/放置在字符类中,它就可以工作
      【解决方案3】:

      注意: Regex 是 Joseph 的更复杂的版本,但仍然存在相同的错误。当我修复它时将取消删除。

      Joseph 的回答很好,但它有一个小错误:如果您有这样的 URL,它将丢弃 URL 的最后一部分:

      http://domain.com/blog/articles/title-here

      您可以改用这个:

      var u = window.location.href.match(/(.*)(\/\d*)/)[1]
      

      正则表达式的工作原理:

      /          # delimiter
      (.*?)      # match anything and put in capture group 1
      (\/        # match the forward slash
       \d*)      # match zero or more digits
      /          # delimiter
      

      【讨论】:

      • 这也是我刚刚意识到的。您的代码版本会检查它是否只是一个数字? (如果你能翻译你输入的正则表达式,那就太棒了!!:))
      • "http://domain.com/blog/articles/title-here/".match(/.*[/]/)[0] 在控制台中运行它。它有效。
      • 可能类似于 "var u = window.location.href.match(/[0-9]\/?\d*/)[1]" ?
      • @Joseph 会的。尝试在浏览器的 URL 栏上运行 javascript:alert("http://domain.com/blog/articles/title-here".match(/.*[/]/)[0])
      • 啊,但你改变了你的帖子。是的,它会砍掉它。矿山按照 OP 表达的要求进行工作
      【解决方案4】:
      var l = window.location;
      l.href.replace(l.pathname, l.pathname.split(/\/[0-9]+$/)[0]);
      

      try it in the console at this URL

      【讨论】: