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

JavaScript中如何用正则表达式提取不同格式URL里的bar部分

提取URL中固定位置的bar部分(JavaScript)

嘿,我来帮你搞定这个问题!你的所有URL路径结构都是固定的/foo/bar/boo,不管前面的域名是domain.tld、www.domain.tld还是子域名,完全不用写复杂到头疼的全URL正则拆分,这里有两个简单可靠的方法:

方法一:用内置URL对象(推荐)

JavaScript的URL API是处理URL的最佳实践,能帮你轻松拆分出路径部分,再提取目标内容:

// 测试所有你的URL格式
const testUrls = [
  'http://domain.tld/foo/bar/boo',
  'http://www.domain.tld/foo/bar/boo',
  'http://sub.domain.tld/foo/bar/boo',
  'http://www.sub.domain.tld/foo/bar/boo'
];

testUrls.forEach(url => {
  const urlObj = new URL(url);
  // 拆分路径并过滤掉空字符串(因为pathname以/开头,split后第一个元素是空)
  const pathParts = urlObj.pathname.split('/').filter(segment => segment);
  // 路径结构是foo → bar → boo,所以bar在索引1的位置(数组从0开始)
  const bar = pathParts[1];
  console.log(`从${url}提取到:${bar}`);
});

运行这段代码,所有URL都会输出bar,完全适配你的格式,而且不用操心正则的各种边界情况。

方法二:用极简正则匹配

因为你的路径格式完全固定,也可以用一个简单的正则直接捕获bar:

const url = 'http://www.sub.domain.tld/foo/bar/boo';
// 匹配/foo/和/boo之间的内容,捕获组1就是bar
const matchResult = url.match(/\/foo\/(\w+)\/boo/);

if (matchResult) {
  const bar = matchResult[1];
  console.log(bar); // 输出bar
}

这个正则很直白:\/foo\/匹配路径里的/foo/,(\w+)捕获一个或多个单词字符(就是你的bar),\/boo匹配后面的/boo,完美命中你的需求。

为什么你之前的方法无效?

你用的那个正则是用来拆分URL的所有组成部分(协议、域名、路径片段等),返回的数组包含了所有捕获组的内容,你需要找到对应bar的那个组,但这个正则太复杂,很容易因为格式细节出错。相比之下,上面两种方法更直接、更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:12:52