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

正则表达式求助:替换多斜杠//+为单斜杠且保留https://

如何保留https://并替换URL中其他连续多斜杠为单斜杠?

这个问题很常见,我来帮你解决~先看你的场景:你想把URL里除了https://之外的连续多斜杠换成单个,但之前的正则会误改https://,尝试的正则语法也不对,下面给你两个可行的解决方案:


方法一:使用负向回顾断言(现代环境推荐)

ES2018及以上的JavaScript支持负向回顾断言,能精准避开https://里的斜杠。你需要的正则是:/(?<!https:)\/{2,}/g

拆解下这个正则的逻辑:

  • (?<!https:):这是负向回顾断言,意思是当前要匹配的连续斜杠,前面不能是https:(完美避开https://里的两个斜杠)
  • \/{2,}:匹配连续2个及以上的斜杠
  • g:全局匹配标记,确保替换所有符合条件的部分

把这个正则套进你的代码里:

var test = "https://test.com///?abc=def//&test=1e";
console.log(test.replace(/(?<!https:)\/{2,}/g, '/'));
// 输出结果:https://test.com/?abc=def/&test=1e

这样既保留了https://的格式,又把其他地方的///、//都替换成了单个/。


方法二:临时标记法(兼容旧环境)

如果你的代码要运行在不支持负向回顾断言的旧版浏览器/环境中,可以用「临时替换+恢复」的思路:

  1. 先把https://替换成一个不会在URL中出现的临时标记
  2. 替换所有连续多斜杠为单个
  3. 最后把临时标记恢复成https://

代码示例:

var test = "https://test.com///?abc=def//&test=1e";
// 第一步:替换https://为临时标记
var tempStr = test.replace(/https:\/\//g, 'TEMP_HTTPS_MARKER');
// 第二步:替换所有连续斜杠
tempStr = tempStr.replace(/\/{2,}/g, '/');
// 第三步:恢复https://
var result = tempStr.replace(/TEMP_HTTPS_MARKER/g, 'https://');
console.log(result);
// 输出同样是:https://test.com/?abc=def/&test=1e

这个方法兼容性拉满,适合所有JavaScript运行环境。


顺便说下你之前的问题出在哪:

  • 第一个正则/[\/{2,}]+/g有语法错误:[\/{2,}]是字符集,会匹配/、{、2、}这些单个字符,而不是连续的斜杠;就算改写成\/{2,},它还是会匹配https://里的两个斜杠,导致变成https:/。
  • 你尝试的(!:)[/{2,}]+语法不对,负向回顾断言的正确写法是(?<!...),所以这个正则根本不会生效。

内容的提问来源于stack exchange,提问作者Expert wanna be

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:18:12