2013-03-26 10 views

risposta

1

Come già accettato una risposta. Per mostrare un po 'di estendere di abbinare e controllare le partite, questo potrebbe aiutare in futuro:

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

uscita sarà:

http://link.com/whatever/ 

Farsetti non importa nella vostra situazione. Se si dispone di questa stringa:

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

vostro array set conterrà m// multipla. Un po 'ridondante, poiché il ciclo vedrà quella variabile alcune volte. La cosa bella è che String.replace() non sostituisce nulla se non trova nulla, quindi nessun danno fatto.

Quello che si potrebbe fare è rimuovere prima i duplicati da set, ma questo richiederebbe quasi la stessa quantità di risorse, semplicemente lasciando passare il ciclo su di essi.

Buona fortuna!

28

penso che questo dovrebbe funzionare: /[^:](\/+)/ o /[^:](\/\/+)/ se desideri solo multipli.

Non corrisponde al numero // ma sembra che non lo stiate cercando.

Per sostituire:

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

Working Demo

+0

Quando provo a sostituire le partite con una singola barra in avanti, il primo restituisce http: /link.co/whateve/ e il secondo ttp: //link.co/whateve/. Per qualche motivo rimuove il primo carattere precedente. – geochr

+0

Oh, vuoi _replace_ them, e non solo _match_ them? Questa è una differenza importante. – Halcyon

+0

@JeffShaver no: rimuove alcuni caratteri –

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

o (per HTTP, HTTPS, FTP e FTPS)

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

La domanda originale non ha chiesto nulla sulla sostituzione dello schema. Questa risposta non è pertinente. – codeadventurer

Problemi correlati