首页 > 解决方案 > JavaScript 正则表达式将 url 分解为域和路径

问题描述

我需要一个正则表达式将给定的 url 分成两部分。

part1 --> 域(包括协议 [http 或 https] 如果存在)。

第 2 部分 --> 余数

因此是这样的:

示例 1

let url = "https://www.example.com/asdasd/123asdsd/sdasd?bar=1"

正则表达式返回

domain = https://www.example.com

remaining path = /asdasd/123asdsd/sdasd?bar=1


示例 2

let url = "www.example.com/asdasd/123asdsd/sdasd?bar=1"

正则表达式返回

domain = www.example.com

remaining path = /asdasd/123asdsd/sdasd?bar=1


示例 3

let url = "example.com/asdasd/123asdsd/sdasd?bar=1"

正则表达式返回

domain = example.com

remaining path = /asdasd/123asdsd/sdasd?bar=1


示例 4

let url = "http://example.com"

正则表达式返回

domain = http://example.com

remaining path = null

标签: javascriptregex

解决方案


使用URL.

var url = new URL("https://www.example.com/asdasd/123asdsd/sdasd?bar=1");
var domain = `${url.protocol}//${url.host}`;
var path = `${url.pathname}?${url.searchParams.toString()}`;
console.log(`domain = ${domain}`)
console.log(`remaining path = ${path}`)

有人用 URL 打败了我,所以我也会发布正则表达式。

var url = "https://www.example.com/asdasd/123asdsd/sdasd?bar=1";
var matches = /(https?:\/\/.*?)([/$].*)/.exec(url);
var domain = matches[1];
var path = matches[2];
console.log(`domain = ${domain}`)
console.log(`remaining path = ${path}`)


推荐阅读