首页 > 解决方案 > JavaScript REGEX:有没有一种方法可以在 URL 中的斜线字符之后匹配斜线,而不会向后看?

问题描述

我正在尝试匹配不属于协议或查询字符串一部分的 url 中后跟斜杠的斜杠。

是否有任何其他方法可以使用 REGEX 但没有后视,因为并非所有浏览器都支持它?

我的例子:

const urls = `
https://asdf.com//asdf//asdf
http://asdf.com//asdf//asdf
ftp://asdf.com//asdf//asdf
//asdf.com//asdf//asdf
//asdf.com//asdf//asdf?test=//
z39.50s://asdf//
`.replace(/(?<!(^[\w\d-.]{2,}\:|^|\?.*))\/(?=\/)/gim, '');
console.log(urls);

标签: javascriptregex

解决方案


您可以使用

.replace(/^(\S*?\/\/)|(\?.*)$|(\/)+/g, '$1$2$3')

看到这个正则表达式演示

细节

  • ^(\S*?\/\/)- 第 1 组(后来称为$1替换模式):0 个或多个非空白字符,尽可能少,从字符串的开头到第一个//
  • |- 或者
  • (\?.*)$- 第 2 组 ( $2):一个?字符和字符串的其余部分
  • |- 或者
  • (\/)+- 第 3 组 ( $3) 捕获单个/字符 1 次或更多次(每个捕获/将覆盖组内存缓冲区中的前一个字符,因为它是“重复捕获组”)

推荐阅读