javascript - 使用 Regex 和 Javascript 从字符串中获取基本 url
问题描述
我正在尝试从字符串中获取基本 url(所以没有 window.location)。
- 它需要删除尾部斜杠
- 它需要是正则表达式(无新 URL)
- 它需要使用查询参数和锚链接
换句话说,以下所有内容都应该返回https://apple.com
或返回https://www.apple.com
最后一个。
https://apple.com?query=true&slash=false
https://apple.com#anchor=true&slash=false
http://www.apple.com/#anchor=true&slash=true&whatever=foo
这些只是示例,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 之后没有/
之前的锚链接和查询
知道如何让它适用于所有情况吗?
解决方案
您可以将#
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]);
})
推荐阅读
- regex - 正则表达式匹配javascript中的电子邮件ID?
- git - 如何修复 git 错误:找不到存储库
- sql - 用于更新所有以数字开头的列值的 SQL 脚本,并且 - 在 Postgresql 中为空白
- asp.net-mvc - MVC 应用程序有两个 cookie
- css - 在移动版 Chrome 上呈现的 CSS 链接/按钮白色像素线
- c++ - 访问着色器中的索引缓冲区 (Directx 11)
- laravel - Laravel eloquent search and order by best matching
- javascript - 鼠标悬停在按钮上时如何显示弹出文本
- flutter - Dart / Flutter:在继续之前等待循环完成......(Async Await?)
- android - Android自定义导航抽屉有奇怪的backstack