2010-10-01 10 views
51

ho queste stringhe in javascript:Javascript espressione regolare: rimuovere prima e l'ultima barra

/banking/bonifici/italia 
/banking/bonifici/italia/ 

e vorrei rimuovere il primo e l'ultimo barra se è esiste.

Ho provato ^\/(.+)\/?$ ma non funziona.

Leggere alcuni post in stackoverflow Ho scoperto che php ha una funzione di assetto e potrei usare la sua traduzione in javascript (http://phpjs.org/functions/trim: 566) ma preferirei un'espressione regolare "semplice".

+1

Correlato: [Taglia solo la prima e l'ultima occorrenza di un carattere in una stringa (PHP)] (http://stackoverflow.com/questions/3834319/trim-only-the-first-and-last-occurrence- di-a-character-in-a-string-php) –

risposta

122
return theString.replace(/^\/|\/$/g, ''); 

"Sostituire tutto (/.../g) slash iniziale (^\/) o (|) barra finale (\/$) con una stringa vuota."

+9

Ho modificato questo per rimuovere qualsiasi numero di barre iniziali o finali, usando "+": replace (/^\/+ | \/+ $/g, ' ') – rickumali

24

Non c'è alcun motivo reale per usare un'espressione regolare qui, le funzioni di stringa funziona bene:

var string = "/banking/bonifici/italia/"; 
if (string.charAt(0) == "/") string = string.substr(1); 
if (string.charAt(string.length - 1) == "/") string = string.substr(0, string.length - 1); 
// string => "banking/bonifici/italia" 

vedere in azione su jsFiddle.

Riferimenti:

+2

Questo è un buon punto di vista (Keep It Simple) – Aif

+0

Sono d'accordo, regexp è il migliore qui. – Shawn31313

+0

Penso che a volte evitando regexp sarà di aiuto sulla leggibilità, ma in questo caso usare 1 riga di espressioni regolari e 1 riga di commento sarà effettivamente il lavoro in un modo molto più elegante. – kroe

3

Solo nel caso che qualcuno ha bisogno di un ottimizzazione prematura qui ...

http://jsperf.com/remove-leading-and-trailing-slashes/5

var path = '///foo/is/not/equal/to/bar///' 
var count = path.length - 1 
var index = 0 

while (path.charCodeAt(index) === 47 && ++index); 
while (path.charCodeAt(count) === 47 && --count); 

path = path.slice(index, count + 1) 
+0

WOW .. While loop! due di loro! –

1

Nel caso utilizzando RegExp è non è un'opzione, o bisogna gestire casi angolo lavorando con URL (quali barre doppie/triple o righe vuote senza sostituzioni complesse), o utilizzando ulteriori elaborazioni, ecco una meno evidente, ma più soluzione funzionale stile:

const urls = [ 
 
    '//some/link///to/the/resource/', 
 
    '/root', 
 
    '/something/else', 
 
]; 
 

 
const trimmedUrls = urls.map(url => url.split('/').filter(x => x).join('/')); 
 

 
console.log(trimmedUrls);

In questo frammento funzione filter() può implementare logiche più complesse della semplice filtraggio stringhe vuote (che è predefinita comportamento).

Word of warning - questo non è veloce come altri frammenti qui.

Problemi correlati