Kembalikan string tanpa trailing slash


196

Saya punya dua variabel:

site1 = "www.somesite.com";  
site2 = "www.somesite.com/";  

Saya ingin melakukan sesuatu seperti ini

function someFunction(site)
{
    // If the var has a trailing slash (like site2), 
    // remove it and return the site without the trailing slash
    return no_trailing_slash_url;
}

Bagaimana saya melakukan ini?


Jawaban:


479

Coba ini:

function someFunction(site)     
{     
    return site.replace(/\/$/, "");
} 

122
Untuk menangani return site.replace(/\/+$/, "");
kasing

13
"/".replace(/\/$/," ") akan menjadi" ". "/" adalah jalur yang valid dan tidak boleh dilucuti.
puchu

79
function stripTrailingSlash(str) {
    if(str.substr(-1) === '/') {
        return str.substr(0, str.length - 1);
    }
    return str;
}

Catatan: IE8 dan yang lebih lama tidak mendukung offset substruktur negatif. Gunakan str.length - 1sebaliknya jika Anda perlu mendukung browser kuno itu.


Sangat suka menggunakan istilah 'kuno' di sini.
PageSource

48

ES6 / ES2015 menyediakan API untuk menanyakan apakah sebuah string diakhiri dengan sesuatu, yang memungkinkan penulisan fungsi yang lebih bersih dan lebih mudah dibaca.

const stripTrailingSlash = (str) => {
    return str.endsWith('/') ?
        str.slice(0, -1) :
        str;
};

3
solusi terbaik di 2019 🤙
Paul Rad

@ PaulRad Saat menggunakan soln ini, mendapatkan masalah str.slice (0, -1) cabang tidak tercakup untuk baris ini pada unit test. Bagaimana cara memperbaikinya?
Bijay Rai

30

Saya akan menggunakan ekspresi reguler:

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 ($)
}

Anda akan ingin memastikan bahwa variabel site adalah string.


3
Saya setuju sepenuhnya, setiap kali Anda menulis regex, itu harus dibungkus dengan fungsi dengan nama deskriptif atau dengan komentar.
Eric Labashosky

12

Cuplikan ini lebih akurat:

str.replace(/^(.+?)\/*?$/, "$1");
  1. Itu tidak menghapus /string, karena ini url yang valid.
  2. Ini strip string dengan beberapa garis miring.

Meskipun ini mungkin pendekatan yang valid untuk menghapus banyak garis miring, itu bukan permintaan OP.
Jon L.

@JonL. Banyak orang menelusuri stack overflow untuk menemukan jawabannya. Saya menemukan jawaban ini bermanfaat daripada jawaban yang diterima.
Ronnel Martinez

@JonL. Banyak orang menelusuri stack overflow untuk menemukan jawabannya. Saya menemukan jawaban ini bermanfaat daripada jawaban yang diterima.
Ronnel Martinez

10

Saya tahu pertanyaannya adalah mengenai trailing slash tetapi saya menemukan posting ini selama pencarian saya untuk memangkas slash (baik di bagian ekor maupun kepala string literal), karena orang akan membutuhkan solusi ini saya memposting satu di sini:

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

PEMBARUAN :

seperti @Stephen R disebutkan dalam komentar, jika Anda ingin menghapus garis miring dan garis miring terbalik di bagian ekor dan kepala string literal, Anda akan menulis:

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

Ini jawaban yang sebenarnya!
Bisakah PERK

1
Jika Anda ingin memangkas kedua garis miring dan garis miring terbalik:.replace(/^[\\/]+|[\\/]+$/g, '')
Stephen R

2

Cara termudah yang saya tahu adalah ini

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

Ini kemudian akan memeriksa a / di akhir dan jika ada menghapusnya jika tidak akan mengembalikan string Anda seperti sebelumnya

Hanya satu hal yang saya belum bisa mengomentari @ThiefMaster wow Anda tidak peduli tentang memori apakah Anda lol runnign substr hanya untuk jika?

Memperbaiki pendidikan untuk indeks berbasis nol pada string.


2

Berikut contoh url kecil.

var currentUrl = location.href;

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

catat url baru

console.log(currentUrl);

2

Berdasarkan jawaban @vdegenne ... cara menghapus:

Garis miring tunggal:

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

Garis miring tunggal atau berturut-turut:

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

Slash tunggal terkemuka:

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

Garis miring tunggal atau berturut-turut:

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

Garis miring utama dan belakang tunggal:

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

Garis miring pertama dan berturut-turut:

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

Untuk menangani keduanya garis miring dan kembali garis miring, ganti contoh \/dengan[\\/]



-11
function someFunction(site) {
  if (site.indexOf('/') > 0)
    return site.substring(0, site.indexOf('/'));
  return site;
}

2
subtring? Selain itu, menghapus garis miring pertama dan semuanya setelahnya.
Pencuri

@ThiefMaster: Benarkah? Anda tidak tahu maksud saya substring? Juga ya, saya bermaksud menghapus garis miring pertama dan semuanya setelah itu karena memang mengisi tagihan untuk pertanyaan dan contoh data yang diposting.
josh.trow

Yah komentarnya mengatakan dia ingin menghapus garis miring
ThiefMaster

@ThiefMaster: Yang, sesuai dengan contohnya, kode saya tidak.
josh.trow

1
Hanya tidak mengapa tidak menggunakan ini kapan saja jika url berubah menjadi "berkualifikasi penuh" memiliki http: // ini tidak akan berfungsi dan tautan apa pun dengan / di tengah tidak akan berfungsi untuk
googler
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.