Devolver cadena sin barra diagonal

Respuestas:

480

Prueba esto:

function someFunction(site)     
{     
    return site.replace(/\/$/, "");
} 
Chandu
fuente
122
Para manejar casos con múltiples barras diagonales finales, puede usar:return site.replace(/\/+$/, "");
mikermcneil
13
"/".replace(/\/$/," ") será" ". "/" es una ruta válida y no debe ser eliminada.
puchu
79
function stripTrailingSlash(str) {
    if(str.substr(-1) === '/') {
        return str.substr(0, str.length - 1);
    }
    return str;
}

Nota: IE8 y versiones anteriores no son compatibles con compensaciones de substr negativas. Úselo str.length - 1en su lugar si necesita admitir esos navegadores antiguos.

ThiefMaster
fuente
Realmente me gusta el uso del término 'antiguo' aquí.
PageSource
48

ES6 / ES2015 proporciona una API para preguntar si una cadena termina con algo, lo que permite escribir una función más limpia y legible.

const stripTrailingSlash = (str) => {
    return str.endsWith('/') ?
        str.slice(0, -1) :
        str;
};
Seth Holladay
fuente
3
mejor solución en 2019 🤙
Paul Rad
@PaulRad Al usar esta solución, el problema de la rama str.slice (0, -1) no está cubierto para esta línea en la prueba unitaria. ¿Cómo arreglar eso?
Bijay Rai
30

Yo usaría una expresión regular:

function someFunction(site)
{
// if site has an end slash (like: www.example.com/),
// then remove it and return the site without the end slash
return site.replace(/\/$/, '') // Match a forward slash / at the end of the string ($)
}

Sin siteembargo, querrás asegurarte de que la variable sea ​​una cadena.

ChronosLLC
fuente
3
Estoy totalmente de acuerdo, cada vez que escriba regex, debe estar envuelto en una función con un nombre descriptivo o con comentarios.
Eric Labashosky
12

Este fragmento es más preciso:

str.replace(/^(.+?)\/*?$/, "$1");
  1. No despoja /cadenas, ya que es una url válida.
  2. Pela cadenas con múltiples barras diagonales.
1ven
fuente
Si bien este puede ser un enfoque válido para eliminar múltiples barras, esa no es la solicitud del OP.
Jon L.
@JonL. Muchas personas navegan por el desbordamiento de pila para encontrar la respuesta. Encuentro útil esta respuesta que la respuesta aceptada.
Ronnel Martinez
@JonL. Muchas personas navegan por el desbordamiento de pila para encontrar la respuesta. Encuentro útil esta respuesta que la respuesta aceptada.
Ronnel Martinez
10

Sé que la pregunta es sobre barras diagonales finales, pero encontré esta publicación durante mi búsqueda de barras diagonales (tanto en la cola como en la cabeza de un literal de cadena), ya que la gente necesitaría esta solución. Estoy publicando una aquí:

'///I am free///'.replace(/^\/+|\/+$/g, ''); // returns 'I am free'

ACTUALIZACIÓN :

como @Stephen R mencionó en los comentarios, si desea eliminar las barras diagonales y las barras diagonales inversas tanto en la cola como en la cabeza de un literal de cadena, escribiría:

'\/\\/\/I am free\\///\\\\'.replace(/^[\\/]+|[\\/]+$/g, '') // returns 'I am free'
vdegenne
fuente
Esta es la verdadera respuesta!
Puede PERK
1
Si desea recortar tanto las barras como las barras invertidas:.replace(/^[\\/]+|[\\/]+$/g, '')
Stephen R
2

La forma más fácil que conozco es esta

function stipTrailingSlash(str){
   if(srt.charAt(str.length-1) == "/"){ str = str.substr(0, str.length - 1);}
   return str
}

Esto verificará si hay un / al final y si está allí, elimínelo, si no lo está, devolverá su cadena como estaba

Solo una cosa que no puedo comentar todavía @ThiefMaster wow, no te importa la memoria ¿lol runnign un substr solo por un if?

Se corrigió la clasificación para el índice basado en cero en la cadena.

Barkermn01
fuente
2

Aquí un pequeño ejemplo de URL.

var currentUrl = location.href;

if(currentUrl.substr(-1) == '/') {
    currentUrl = currentUrl.substr(0, currentUrl.length - 1);
}

registrar la nueva url

console.log(currentUrl);
DevJ3rry
fuente
2

Basado en la respuesta de @vdegenne ... cómo despojar:

Barra inclinada final simple:

theString.replace(/\/$/, '');

Barras finales simples o consecutivas:

theString.replace(/\/+$/g, '');

Barra diagonal única:

theString.replace(/^\//, '');

Barras iniciales simples o consecutivas:

theString.replace(/^\/+/g, '');

Barras iniciales y finales simples:

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

Barras iniciales y finales simples o consecutivas:

theString.replace(/^\/+|\/+$/g, '')

Para manejar ambas barras y traseros barras, reemplace las instancias de \/la[\\/]

Stephen R
fuente
1
function stripTrailingSlash(text) {
    return text
        .split('/')
        .filter(Boolean)
        .join('/');
}

otra solución.

Доширак
fuente
-11
function someFunction(site) {
  if (site.indexOf('/') > 0)
    return site.substring(0, site.indexOf('/'));
  return site;
}
josh.trow
fuente
2
subtring? Además de eso, elimina la primera barra y todo lo que sigue.
ThiefMaster
@ ThhiefMaster: ¿En serio? ¿No puedes decir que quise decir substring? También sí, quise eliminar la primera barra oblicua y todo lo siguiente, ya que llena la factura de la pregunta y los datos de ejemplo publicados.
josh.trow
Bueno, su comentario dice que quiere eliminar la barra diagonal
ThiefMaster
@ ThhiefMaster: que, según sus ejemplos, mi código sí.
josh.trow
1
Solo por qué no usar esto en cualquier momento si las URL cambian para ser "completamente calificado" tienen http: // esto no funcionará y cualquier enlace con / en el medio no funcionará para googlers
Barkermn01