首頁 > web前端 > js教程 > 主體

詳解使用 JavaScript 解析 URL的方法

青灯夜游
發布: 2020-11-26 18:02:11
轉載
11544 人瀏覽過

詳解使用 JavaScript 解析 URL的方法

在 Web 開發中,有許多情況需要解析 URL,這篇主要學習如何使用 URL 物件實現這一點。

開始

建立一個以下內容的 HTML 文件,並在瀏覽器中開啟。

    
        JavaScript URL parsing
    
    
        
    
登入後複製

如果你想嘗試本文中的任何內容,可以將其放在

什麼是 URL

這應該是相當簡單的,但讓我們說清楚。 URL 是網頁的位址,可以在瀏覽器中輸入以取得該網頁的唯一內容。可以在地址欄中看到它:

詳解使用 JavaScript 解析 URL的方法

URL 是統一資源定位符,對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是網路上標準資源的位址。網路上的每個文件都有一個唯一的 URL,它包含的資訊指出文件的位置以及瀏覽器應該如何處理它。

此外,如果你不熟悉基本 URL 路徑的工作方式,可以查看此文學習。

URL 不都長的一樣的

這是一個快速提醒- 有時URL 可能非常奇怪,如下:

##https://example.com: 1234/page/?a=b

http://localhost/page.html

https://154.23.54.156/page?x=...

#file :///Users/username/folder/file.png

取得目前URL

取得目前頁面的URL 非常簡單- 我們可以使用

window.location

試著把這個加入到我們形如寫的的腳本中:

console.log(window.location);
登入後複製
查看瀏覽器的控制台:

詳解使用 JavaScript 解析 URL的方法

不是你想要的?這是因為它不會回傳你在瀏覽器中看到的實際URL 位址-它傳回的是一個URL 物件。使用這個 URL 對象,我們可以解析 URL 的不同部分,接下來就會講到。

建立 URL 物件

很快就會看到,可以使用 URL 物件來了解 URL 的不同部分。如果你想對任何 URL 執行此操作,而不僅僅是當前頁面的 URL,該怎麼辦?我們可以透過建立一個新的 URL 物件來實現。以下是如何創建一個:

var myURL = new URL('https://example.com');
登入後複製
就這麼簡單!可以列印

myURL 來查看myURL 的內容:

console.log(myURL);
登入後複製

詳解使用 JavaScript 解析 URL的方法

出於本文的目的,將myURL 設定為這個值:

var myURL = new URL('https://example.com:4000/folder/page.html?x=y&a=b#section-2')
登入後複製
將其複製並貼上到

URL 物件的結構

使用 URL 對象,可以非常輕鬆地取得 URL 的不同部分。以下是你可以從 URL 物件獲得的所有內容。對於這些範例,我們將使用上面設定的

myURL

href

URL 的

href# 基本上是作為字串(文本)的整個 URL。如果你想把頁面的 URL 作為字串而不是 URL 對象,你可以寫 window.location.href

console.log(myURL.href);
// Output: "https://example.com:4000/folder/page.html?x=y&a=b#section-2"
登入後複製

協定 (protocol)

URL的協定是一開始的部分。這告訴瀏覽器如何存取該頁面,例如透過 HTTP 或 HTTPS。但還有很多其他協議,像是

ftp(檔案傳輸協定)和 ws(WebSocket)。通常,網站將使用 HTTP 或 HTTPS。

雖然如果你的電腦上開啟了文件,你可能正在使用文件協定! URL物件的協定部分包括

,但不包括 //。讓我們看看 myURL 吧!

console.log(myURL.protocol);
// Output: "https:"
登入後複製

主機名稱(hostname)

主機名稱是網站的網域名稱。如果你不熟悉域名,則它是在瀏覽器中看到的URL的主要部分 - 例如

google.comcodetheweb.blog

console.log(myURL.hostname);
// Output: "example.com"
登入後複製

連接埠(port)

URL 的連接埠號碼位於網域後面,以冒號分隔(例如

example.com:1234)。大多數網址都沒有連接埠號,這種情況非常罕見。

連接埠號碼是伺服器上用於獲取資料的特定「通道」 - 因此,如果我擁有

example.com,我可以在多個不同的連接埠上發送不同的資料。但通常域名預設為一個特定端口,因此不需要端口號。來看看 myURL 的連接埠號碼:

console.log(myURL.port);
// Output: "4000"
登入後複製

主机(host)

主机只是主机名端口放在一起,尝试获取 myURL 的主机:

console.log(myURL.host);
// Output: "example.com:4000"
登入後複製

来源(origin)

origin 由 URL 的协议,主机名和端口组成。 它基本上是整个 URL,直到端口号结束,如果没有端口号,到主机名结束。

console.log(myURL.origin);
// Output: "https://example.com:4000"
登入後複製

pathname(文件名)

pathname 从域名的最后一个 “/” 开始到 “?” 为止,是文件名部分,如果没有 “?” ,则是从域名最后的一个 “/” 开始到 “#” 为止 , 是文件部分, 如果没有 “?” 和 “#” , 那么从域名后的最后一个 “/” 开始到结束 , 都是文件名部分。

console.log(myURL.pathname);
// Output: "/folder/page.html"
登入後複製

锚点(hash)

“#” 开始到最后,都是锚部分。可以将哈希值添加到 URL 以直接滚动到具有 ID 为该值的哈希值 的元素。 例如,如果你有一个 idhello 的元素,则可以在 URL 中添加 #hello 就可以直接滚动到这个元素的位置上。通过以下方式可以在 URL 获取 “#” 后面的值:

console.log(myURL.hash);
// Output: "#section-2"
登入後複製

查询参数 (search)

你还可以向 URL 添加查询参数。它们是键值对,意味着将特定的“变量”设置为特定值。 查询参数的形式为 key=value。 以下是一些 URL 查询参数的示例:

?key1=value1&key2=value2&key3=value3
登入後複製

请注意,如果 URL 也有 锚点(hash),则查询参数位于 锚点(hash)(也就是 ‘#’)之前,如我们的示例 URL 中所示:

console.log(myURL.search);
// Output: "?x=y&a=b"
登入後複製

但是,如果我们想要拆分它们并获取它们的值,那就有点复杂了。

使用 URLSearchParams 解析查询参数

要解析查询参数,我们需要创建一个 URLSearchParams 对象,如下所示:

var searchParams = new URLSearchParams(myURL.search);
登入後複製

然后可以通过调用 searchParams.get('key')来获取特定键的值。 使用我们的示例网址 - 这是原始搜索参数:

?x=y&a=b
登入後複製

因此,如果我们调用 searchParams.get('x'),那么它应该返回 y,而 searchParams.get('a')应该返回 b,我们来试试吧!

console.log(searchParams.get('x'));
// Output: "y"
console.log(searchParams.get('a'));
// Output: "b"
登入後複製

扩展

获取 URL 的中参数

方法一:正则法

function getQueryString(name) {
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    var r = window.location.search.substr(1).match(reg);
    if (r != null) {
        return unescape(r[2]);
    }
    return null;
}
// 这样调用:
alert(GetQueryString("参数名1"));
alert(GetQueryString("参数名2"));

alert(GetQueryString("参数名3"));
登入後複製

方法二:split拆分法

function GetRequest() {
    var url = location.search; //获取url中"?"符后的字串
    var theRequest = new Object();
    if (url.indexOf("?") != -1) {
        var str = url.substr(1);
        strs = str.split("&");
        for(var i = 0; i 

修改 URL 的中某个参数值

//替换指定传入参数的值,paramName为参数,replaceWith为新值
function replaceParamVal(paramName,replaceWith) {
    var oUrl = this.location.href.toString();
    var re=eval('/('+ paramName+'=)([^&]*)/gi');
    var nUrl = oUrl.replace(re,paramName+'='+replaceWith);
    this.location = nUrl;
  window.location.href=nUrl
}
登入後複製

原文地址:https://codetheweb.blog/2019/01/21/javascript-url-parsing/

为了保证的可读性,本文采用意译而非直译。

更多编程相关知识,请访问:编程学习网站!!

以上是詳解使用 JavaScript 解析 URL的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!