JavaScript >> Javascript 文檔 >  >> Tags >> split

parseUri 1.2:在 JavaScript 中拆分 URL

我剛剛更新了 parseUri。如果您還沒有看過舊版本,則 parseUri 是一個函數,它將任何格式正確的 URI 拆分為其部分,所有這些都是可選的。它的準確性、靈活性和簡潔性是無與倫比的。

亮點:

  • 全面拆分 URI,包括將查詢字符串拆分為鍵/值對。 (增強)
  • 兩種解析模式:鬆散和嚴格。 (新)
  • 易於使用(返回一個對象,所以你可以這樣做,例如,parseUri(uri).anchor )。
  • 提供方便的預連接組件(路徑 =目錄和文件;權限 =用戶信息、主機和端口等)
  • 通過更新 parseUri.options.key 在不編輯函數的情況下更改 URI 部分的默認名稱 . (新)
  • 非常輕量級(1 KB 之前 縮小或壓縮)。
  • 根據 MIT 許可發布。

詳情:

此函數的舊版本使用現在稱為鬆散解析模式(在此版本中仍然是默認設置)。鬆散模式與官方通用 URI 規範 (RFC 3986) 略有不同,但這樣做允許函數以大多數最終用戶直觀期望的方式拆分 URI。然而,鬆散模式的更精細的細節使其無法正確處理不是從根開始的相對路徑(例如,“../file.html”或“dir/file.html”)。另一方面,嚴格模式嘗試根據 RFC 3986 拆分 URI。具體而言,在鬆散模式下,目錄不需要以斜杠結尾(例如,“/dir?query”中的“dir”被視為目錄而不是文件名),並且 URI 可以以權限開頭而不是“//”(這意味著“yahoo.com/search/”中的“yahoo.com”被視為主機,而不是比目錄路徑的一部分)。

由於我假設大多數開發人員始終希望使用一種模式或另一種模式,因此在運行 parseUri 時未將解析模式指定為參數 ,而是作為 parseUri 的屬性 功能本身。只需運行以下代碼行即可切換到嚴格模式:

parseUri.options.strictMode = true;

從那時起,parseUri 將在嚴格模式下工作(直到您將其重新關閉)。

代碼:

// parseUri 1.2.2
// (c) Steven Levithan <stevenlevithan.com>
// MIT License

function parseUri (str) {
	var	o   = parseUri.options,
		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
		uri = {},
		i   = 14;

	while (i--) uri[o.key[i]] = m[i] || "";

	uri[o.q.name] = {};
	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
		if ($1) uri[o.q.name][$1] = $2;
	});

	return uri;
};

parseUri.options = {
	strictMode: false,
	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
	q:   {
		name:   "queryKey",
		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
	},
	parser: {
		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
	}
};

你可以在這裡下載。

parseUri 沒有依賴關係,並且已經在 IE 5.5–7、Firefox 2.0.0.4、Opera 9.21、Safari 3.0.1 beta for Windows 和 Swift 0.2 中進行了測試。


Tutorial JavaScript 教程
  1. 康威人生遊戲🎮 JavaScript 上

  2. 如何獲取當前執行的 javascript 代碼的文件路徑

  3. 高階函數

  4. 異步迭代器:一個實際的例子壯舉。適用於 Node.js 的 AWS 開發工具包

  5. 將 Nuxt.js + Express 項目轉換為 TypeScript

  6. 使用 Google Chrome 的奇怪用戶代理

  7. 加法在 JavaScript 中不起作用

  1. 13 ++更多

  2. 安全的在線投票是可能的。這是如何

  3. 如何處理 MongoDB/mongoose 中的轉換錯誤

  4. 使用 NestJs 構建 CRUD API - 編寫第一個 API。

  5. #100daysofCode 挑戰的第 4 天。學習反應

  6. 在材質ui中的兩個文本字段之間添加文本

  7. 從 IndexedDB 獲取數據

  1. 使用 CustomPaint 和 Shape Maker 在 Flutter 中繪製形狀

  2. Frontity 2020:回顧的一年

  3. CSR、SSR、SSG和ISR的直觀解釋和比較

  4. Vapperjs - 基於 Vue 的 SSR 框架