簡體   English   中英

用於匹配 URL 中的多個正斜杠的正則表達式

[英]Regex for matching multiple forward slashes in URL

我需要一個正則表達式來用一個正斜杠替換 URL 中的多個正斜杠,不包括冒號后面的斜杠

例如http://link.com//whatever///會變成http://link.com/whatever/

我認為這應該有效: /[^:](\/+)//[^:](\/\/+)/如果你只想要multiples

它不會匹配領先//但看起來你不是在尋找那個。

取代:

"http://test//a/b//d".replace(/([^:]\/)\/+/g, "$1") // -->  http://test/a/b/d

工作演示

因為您已經接受了答案。 為了顯示更多的匹配和控制匹配,這可能會在將來對您有所幫助:

var url = 'http://link.com//whatever///';
var set = url.match(/([^:]\/{2,3})/g); // Match (NOT ":") followed by (2 OR 3 "/")

for (var str in set) {
    // Modify the data you have
    var replace_with = set[str].substr(0, 1) + '/';

    // Replace the match
    url = url.replace(set[str], replace_with);
}

console.log(url);

將輸出:

http://link.com/whatever/

雙胞胎在你的情況下並不重要。 如果你有這個字符串:

var url = 'http://link.com//om/om/om/om/om///';

您的set數組將包含多個m// 有點多余,因為循環會看到該變量幾次。 好消息是String.replace()如果什么也沒找到,它什么也不替換,所以不會造成任何傷害。

您可以做的是首先從set中去除重復項,但這幾乎需要與讓 for 循環遍歷它們相同數量的資源。

祝你好運!

result = subject.replace(/(?<!http:)\/*\//g, "/");

或(對於 http、https、ftp 和 ftps)

result = subject.replace(/(?<!(?:ht|f)tps?:)\/*\//g, "/");

最初接受的答案在替換方面做得很好,但在匹配方面做得不夠。 並且當前接受的答案與重復斜杠之前的字符匹配,也不利於匹配。

使用否定的lookbehind從匹配中排除協議(?<!:) ,並使用花括號量詞將 2 匹配到無限斜線\/{2,}完成匹配和替換的工作。

(?<!:)\/{2,}

 let str = 'https://test.example.com:8080//this/is//an/exmaple///'; document.write('Original: ' + str + '<br><br>'); document.write('Matches: ' + str.match(/(?<!:)\/{2,}/g) + '<br><br>'); document.write('Replaced: ' + str.replace(/(?<!:)\/{2,}/g, '/'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM