2013-03-26 8 views

Antwort

1

Wie Sie bereits eine Antwort akzeptiert. Um zu zeigen, einige mehr erweitern passender und die Spiele zu steuern, könnte dies Ihnen in Zukunft helfen:

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); 

Will Ausgang:

http://link.com/whatever/ 

Dubletten werden nicht in Ihrer Situation wichtig sind. Wenn Sie diese Zeichenfolge haben:

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

Ihr set Array mehr m// enthält. Ein bisschen überflüssig, da die Schleife diese Variable einige Male sehen wird. Das Schöne ist, dass String.replace() nichts ersetzt, wenn es nichts findet, also kein Schaden angerichtet.

Was Sie tun könnten, ist die Duplikate von set zuerst zu entfernen, aber das würde fast die gleiche Menge an Ressourcen erfordern, als nur die for-Schleife über sie gehen zu lassen.

Viel Glück!

28

Ich denke, das sollte funktionieren: /[^:](\/+)/ oder /[^:](\/\/+)/ wenn Sie Multiples wollen.

Es passt nicht zu führenden //, aber es sieht so aus, als ob Sie nicht suchen.

zu ersetzen:

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

Working Demo

+0

Wenn ich versuche, die Übereinstimmungen mit einem einzigen Schrägstrich zu ersetzen, gibt er zuerst http: /link.co/whateve/ und die zweite ttp: //link.co/whateve/ zurück. Aus irgendeinem Grund entfernt es das erste vorangehende Zeichen. – geochr

+0

Oh, Sie wollen _replace_, und nicht nur _match_ sie? Das ist ein wichtiger Unterschied. – Halcyon

+0

@JeffShaver nein: es entfernen einige Zeichen –

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

oder (für HTTP, HTTPS, FTP und FTPS)

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

Die ursprüngliche Frage fragte nichts über das Ersetzen des Schemas. Diese Antwort ist nicht relevant. – codeadventurer