[英]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.