2016-11-17 57 views

回答

3

您可以使用

var res = s.replace(/(https?:\/\/)|(\/)+/g, "$1$2"); 

regex demo

詳細

  • (https?:\/\/) - 捕捉http://https://到組1
  • | - Ø ř
  • (\/)+ - 一個或多個斜線匹配且僅一個/被保持在第2組

在替換,$1插入第1組內容回結果(恢復協議)和$2反向引用只插入一個斜線。

var s = "http://www.gogogogo.com//something//here"; 
 
var res = s.replace(/(https?:\/\/)|(\/)+/g, "$1$2"); 
 
console.log(res);

+0

你有'javascript'版本嗎? – Jack

+1

's.replace(/(https?:\/\ /)|(\ /)+/g,「$ 1 $ 2」);' –

+0

對不起,混淆了各種語言,但它基本相同,請參閱JavaScript版本。 –

0

對於什麼是錯的正則表達式的解釋,你可以試試這個在線正則表達式測試儀:

https://regex101.com/

一方面,[^]是不同的來自^ []。 []檢查除特殊術語A-Z,a-z,0-9,A-z等之外的單個字符... [^]匹配不在其內的字符。

所以你的正則表達式,基本上此: 匹配開始以比字符的表達不是H,不是T,非p,不:,然後接着的兩個或更多/

的結果是一個0 //爲完整匹配,//爲()項,在同一位置。其他的//之前有:或t,因此不匹配。