Tengo estas cadenas en javascript:
/banking/bonifici/italia
/banking/bonifici/italia/
y me gustaría eliminar la primera y la última barra si existe.
Lo intenté ^\/(.+)\/?$
pero no funciona.
Al leer alguna publicación en stackoverflow, encontré que php tiene la función de recorte y podría usar su traducción de JavaScript ( http://phpjs.org/functions/trim : 566) pero preferiría una expresión regular "simple".
javascript
regex
CorPao
fuente
fuente
Respuestas:
return theString.replace(/^\/|\/$/g, '');
"Reemplace todas las (
/.../g
) barra inclinada (^\/
) o (|
) barra inclinada (\/$
) con una cadena vacía".fuente
//www.google.com
?//
Será extrañado./^\s*\/*\s*|\s*\/*\s*$/gm
, se ocupa de algunos posibles espacios en blanco antes y después de las barras y barras múltiples agregando el *No hay una razón real para usar una expresión regular aquí, las funciones de cadena funcionarán bien:
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"
Vea esto en acción en jsFiddle .
Referencias:
String.substr
String.charAt
fuente
En caso de que usar RegExp no sea una opción , o si tiene que manejar casos de esquina mientras trabaja con URL (como barras diagonales dobles / triples o líneas vacías sin reemplazos complejos), o si utiliza un procesamiento adicional, aquí hay una menos obvia, pero más funcional: solución de estilo:
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, la
filter()
función puede implementar una lógica más compleja que simplemente filtrar cadenas vacías (que es el comportamiento predeterminado).Una advertencia: esto no es tan rápido como otros fragmentos aquí.
fuente
En caso de que alguien necesite 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)
fuente
theString.replace(/^\/|\/$/g, '')
es realmente simple y fácil de entender para las personas que leen el código, ¡pero probablemente más lento que esta!