JavaScript正则表达式:有没有一种方法可以在URL中匹配一个接一个的斜杠字符而无需负查找?

JavaScript正则表达式:有没有一种方法可以在URL中匹配一个接一个的斜杠字符而无需负查找?,javascript,regex,Javascript,Regex,我正在尝试匹配url中的斜杠,该url不是协议或查询字符串的一部分 有没有其他方法可以使用正则表达式但不使用lookback,因为并非所有浏览器都支持它 我举的例子: const URL=` https://asdf.com//asdf//asdf http://asdf.com//asdf//asdf ftp://asdf.com//asdf//asdf //asdf.com//asdf//asdf //asdf.com//asdf//asdf?测试=// z39.50s://asdf// `

我正在尝试匹配url中的斜杠,该url不是协议或查询字符串的一部分

有没有其他方法可以使用正则表达式但不使用lookback,因为并非所有浏览器都支持它

我举的例子:
const URL=`
https://asdf.com//asdf//asdf
http://asdf.com//asdf//asdf
ftp://asdf.com//asdf//asdf
//asdf.com//asdf//asdf
//asdf.com//asdf//asdf?测试=//
z39.50s://asdf//
`.替换(/(?您可以使用

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

详细信息

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

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

详细信息

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

查找缺陷的正常解决方法是使用回调函数
在替换零件中。
原因是您必须匹配错误的部分才能移动匹配位置
这需要回调函数中的逻辑

在99.99%的情况下,如果您有不同的替代品,您必须这样做

对于您的情况,这并不重要,因为您有一个空白的替换件。
在剥离由
不在一个小组里

如果要用空字符串以外的任何内容替换它,
这是唯一的办法

为此,这里是您的(大部分)未更改的正则表达式,用于回调

     (                             # (1 start)
          (?: ^ [\w\d\-.]{2,} : | ^ | \? .* )
          //
     )                             # (1 end)
  |  /
     (?= / )
var url=[
'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/'];
对于(var i=0;iconsole.log(URL);
查找缺陷的正常解决方法是使用回调函数
在替换零件中。
原因是您必须匹配错误的部分才能移动匹配位置
这需要回调函数中的逻辑

在99.99%的情况下,如果您有不同的替代品,您必须这样做

对于您的情况,这并不重要,因为您有一个空白的替换件。
在剥离由
不在一个小组里

如果要用空字符串以外的任何内容替换它,
这是唯一的办法

为此,这里是您的(大部分)未更改的正则表达式,用于回调

     (                             # (1 start)
          (?: ^ [\w\d\-.]{2,} : | ^ | \? .* )
          //
     )                             # (1 end)
  |  /
     (?= / )
var url=[
'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/'];
对于(var i=0;iconsole.log(URL);
这让人惊讶。你想在这里匹配什么?据我所知,你的示例中没有双冒号。不清楚在你的示例中应该匹配什么…尝试
。替换(/^(\s*?\/\/)\/)\(\/)+/gm,$1$2)
,请参阅。通常使用
https?:
代替
\S*?
,如果可以定义协议模式,可能会更安全。然后应该是
。替换(/^(\S*?\/\/)\124;(\?*)$\ 124;(\/)+/g,$1$2$3'))
,请参阅。令人惊讶的是。您想在这里匹配什么?据我所知,您的示例中没有双冒号。不清楚在您的示例中应该匹配什么…请尝试
。替换(/^(\s*?\/)\/)\(\/)+/gm,$1$2)
,请参阅。通常使用
https?:
来代替
\S*?
,如果可以定义协议模式,可能会更安全。然后应该是
。替换(/^(\S*?\/\/)\124;(\?*)$\ 124;(\/)+/g,$1$2$3')
,请参阅。