16

URL内の複数のスラッシュを、コロンに続くものを除いて単一のスラッシュに置き換えるための正規表現が必要です

http://link.com//whatever///http://link.com/whatever/

4

3 に答える 3

33

私はこれがうまくいくはずだと思います:/[^:](\/+)/またはあなたが倍数/[^:](\/\/+)/だけが欲しいなら。

リーディングとは一致//しませんが、あなたはそれを探していないようです。

交換する:

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

作業デモ

于 2013-03-26T13:23:03.713 に答える
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ループで重複を処理するのとほぼ同じ量のリソースが必要になります。

幸運を!

于 2013-03-26T14:30:59.230 に答える
0
result = subject.replace(/(?<!http:)\/*\//g, "/");

または(http、https、ftp、およびftpsの場合)

result = subject.replace(/(?<!(?:ht|f)tps?:)\/*\//g, "/");
于 2013-03-26T13:43:34.420 に答える