You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript处理URL提取去除前缀后的目标域名路径?

解决URL提取核心域名及路径的问题

需求说明

需要从给定URL中移除http:///https://前缀,同时移除所有以www开头的子域名(包括www.、wwwtest.、www-test.这类),最终保留核心主机部分与后续路径。

输入示例

const value1 = 'https://localhost:4200/~';
const value2 = 'https://hoge.com/~';
const value3 = 'https://www.hoge.com/~';
const value4 = 'https://wwwtest.hoge.com/~';
const value5 = 'https://www-test.hoge.com/~';

期望输出

'localhost:4200/~'; //value1 
'hoge.com/~'; //value2
'hoge.com/~'; //value3
'hoge.com/~'; //value4
'hoge.com/~'; //value5

原方案问题分析

你使用的正则/^https?:\/\/|www.*\./g存在贪婪匹配问题:www.*\.会从www开始匹配到最后一个.,导致www.hoge.com中的www.hoge.被全部替换,最终只剩com/~,不符合预期。

解决方案

方案一:使用URL API(推荐)

利用标准URL API解析URL,处理主机名后拼接端口与路径,这种方式更可靠,能覆盖更多边缘情况。

function getCleanUrl(value: string): string {
  const url = new URL(value);
  let hostname = url.hostname;
  
  // 匹配并移除开头的www类子域名
  const domainMatch = hostname.match(/^(www[\w-]*\.)?(.*)$/);
  if (domainMatch) {
    hostname = domainMatch[2] || hostname;
  }
  
  // 拼接端口(若存在)和路径
  const portSegment = url.port ? `:${url.port}` : '';
  return `${hostname}${portSegment}${url.pathname}`;
}

// 测试验证
const value1 = 'https://localhost:4200/~';
const value2 = 'https://hoge.com/~';
const value3 = 'https://www.hoge.com/~';
const value4 = 'https://wwwtest.hoge.com/~';
const value5 = 'https://www-test.hoge.com/~';

console.log(getCleanUrl(value1)); // localhost:4200/~
console.log(getCleanUrl(value2)); // hoge.com/~
console.log(getCleanUrl(value3)); // hoge.com/~
console.log(getCleanUrl(value4)); // hoge.com/~
console.log(getCleanUrl(value5)); // hoge.com/~

方案二:改进正则表达式

调整正则,避免贪婪匹配,仅匹配开头的www类子域名前缀:

function hogeReplace(value: string): string {
  // 匹配开头的http/https前缀,以及可选的www[\w-]*.子域名前缀
  return value.replace(/^https?:\/\/(www[\w-]*\.)?/, '');
}

// 测试验证
console.log(hogeReplace(value1)); // localhost:4200/~ 
console.log(hogeReplace(value2)); // hoge.com/~ 
console.log(hogeReplace(value3)); // hoge.com/~ 
console.log(hogeReplace(value4)); // hoge.com/~ 
console.log(hogeReplace(value5)); // hoge.com/~ 

正则说明:^https?:\/\/(www[\w-]*\.)? 中:

  • ^https?:\/\/ 匹配开头的http://或https://
  • (www[\w-]*\.)? 匹配可选的www开头子域名(支持wwwtest.、www-test.这类变体),仅匹配到第一个.为止,不会过度匹配。

内容的提问来源于stack exchange,提问作者shibata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 10:32:03