首页 > 解决方案 > 使用 Regex 和 Javascript 从字符串中获取基本 url

问题描述

我正在尝试从字符串中获取基本 url(所以没有 window.location)。

换句话说,以下所有内容都应该返回https://apple.com或返回https://www.apple.com最后一个。

这些只是示例,url 可以有不同的子域,例如https://shop.apple.co.uk/?query=foo应该返回https://shop.apple.co.uk- 它可以是任何 url,例如:https://foo.bar

我离得越近:

const baseUrl = url.replace(/^((\w+:)?\/\/[^\/]+\/?).*$/,'$1').replace(/\/$/, ""); // Base Path & Trailing slash

但这不适用于在 url 之后没有/之前的锚链接和查询

知道如何让它适用于所有情况吗?

标签: javascriptregex

解决方案


您可以将#and添加?到您的否定字符类。您不需要.*,因为它会匹配到字符串的末尾。

对于您的示例数据,您可以匹配

^https?:\/\/[^#?\/]+

正则表达式演示

strings = [
"https://apple.com?query=true&slash=false",
    "https://apple.com#anchor=true&slash=false",
    "http://www.apple.com/#anchor=true&slash=true&whatever=foo",
    "https://foo.bar/?q=true"
];

strings.forEach(s => {
    console.log(s.match(/^https?:\/\/[^#?\/]+/)[0]);
})


推荐阅读