2010-10-01 10 views
51

tengo estas cadenas en javascript:Javascript expresión regular: eliminar primera y la última barra

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

y me gustaría quitar la primera y la última barra si es que existe.

Intenté ^\/(.+)\/?$ pero no funciona.

Lectura de una publicación en stackoverflow Descubrí que php tiene función de recorte y podría usar su traducción javascript (http://phpjs.org/functions/trim: 566), pero preferiría una expresión regular "simple".

+1

Relacionado: [Recortar solo la primera y la última aparición de un carácter en una cadena (PHP)] (http://stackoverflow.com/questions/3834319/trim-only-the-first-and-last-occurrence- of-a-character-in-a-string-php) –

Respuesta

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

"Reemplazar todos (/.../g) barra inicial (^\/) o (|) barra diagonal (\/$) con una cadena vacía."

+9

Modifiqué esto para eliminar cualquier número de barras iniciales o finales, usando "+": replace (/^\/+ | \/+ $/g, ' ') – rickumali

24

No hay ninguna razón real para utilizar una expresión regular aquí, funciones de cadena no tendrán ningún problema:

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" 

ver esto en acción en jsFiddle.

Referencias:

+2

Ese es un buen punto de vista (Keep It Simple) – Aif

+0

Estoy de acuerdo, la expresión regular es la mejor aquí. – Shawn31313

+0

Creo que a veces evitar la expresión regular ayudará a la legibilidad, pero en este caso usar 1 línea de expresiones regulares y 1 línea de comentarios realmente hará el trabajo de una manera mucho más elegante. – kroe

3

Sólo en caso de que alguien necesita una optimización prematura aquí ...

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

¡GUAU .. Mientras bucles! ¡dos de ellos! –

1

En caso de que el uso de RegExp es no es una opción, o usted tiene que manejar casos de esquina mientras se trabaja con URLs (tales como barras dobles/triples o líneas en blanco sin reemplazos complejos), o la utilización de un procesamiento adicional, he aquí una menos obvia, pero más solución de estilo funcional:

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

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

 
console.log(trimmedUrls);

En este fragmento función filter() puede implementar una lógica más compleja que un simple filtrado de cadenas vacías (que es el predeterminado comportamiento).

Palabra de advertencia: esto no es tan rápido como otros fragmentos aquí.

Cuestiones relacionadas