用于匹配URL中的多个正斜杠的正则表达式

时间:2013-03-26 13:21:23

标签: javascript regex

我需要一个正则表达式来替换带有单个正斜杠的URL中的多个正斜杠,不包括冒号后面的斜杠

e.g。 http://link.com//whatever///将成为http://link.com/whatever/

3 个答案:

答案 0 :(得分:30)

我认为这应该有效:/[^:](\/+)//[^:](\/\/+)/如果您只想要倍数

它与前导//不匹配,但看起来你不是在寻找它。

替换:

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

<强> Working Demo

答案 1 :(得分:2)

你已经接受了答案。为了展示匹配和控制匹配的更多扩展,这可能在将来帮助您:

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循环遍历它们。

祝你好运!

答案 2 :(得分:-1)

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

或(对于http,https,ftp和ftps)

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