Trả về chuỗi mà không dấu gạch chéo


196

Tôi có hai biến:

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

Tôi muốn làm một cái gì đó như thế này

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;
}

Làm thế nào để tôi làm điều này?


Câu trả lời:


477

Thử cái này:

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

122
Để xử lý các trường hợp có nhiều dấu gạch chéo, bạn có thể sử dụng:return site.replace(/\/+$/, "");
mikermcneil

13
"/".replace(/\/$/," ") sẽ là" ". "/" là một đường dẫn hợp lệ và nó không nên bị tước.
puchu

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

Lưu ý: IE8 trở lên không hỗ trợ độ lệch âm. Sử dụng str.length - 1thay thế nếu bạn cần hỗ trợ các trình duyệt cổ xưa.


Thực sự thích việc sử dụng thuật ngữ 'cổ đại' ở đây.
Nguồn trang

48

ES6 / ES2015 cung cấp API để hỏi xem một chuỗi kết thúc bằng thứ gì đó, cho phép viết một hàm sạch hơn và dễ đọc hơn.

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

3
giải pháp tốt nhất năm 2019
Paul Rad

@PaulRad Trong khi sử dụng soln này, việc phát sinh nhánh str.slice (0, -1) không được đề cập cho dòng này trong bài kiểm tra đơn vị. Làm thế nào để khắc phục điều đó?
Bijay Rai

30

Tôi muốn sử dụng một biểu thức thông thường:

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

Tuy nhiên, bạn sẽ muốn đảm bảo rằng biến đó sitelà một chuỗi.


3
Tôi hoàn toàn đồng ý, bất cứ khi nào bạn viết regex, nó nên được gói trong một hàm với một tên mô tả hoặc với các bình luận.
Eric Labashosky

11

Đoạn trích này chính xác hơn:

str.replace(/^(.+?)\/*?$/, "$1");
  1. Nó không tước /chuỗi, vì đó là một url hợp lệ.
  2. Nó dải dây với nhiều dấu gạch chéo.

Mặc dù đây có thể là một cách tiếp cận hợp lệ để loại bỏ nhiều dấu gạch chéo, nhưng đó không phải là yêu cầu của OP.
Jon L.

@JonL. Nhiều người duyệt stack tràn để tìm câu trả lời. Tôi thấy câu trả lời này hữu ích hơn câu trả lời được chấp nhận.
Ronnel Martinez ngày

@JonL. Nhiều người duyệt stack tràn để tìm câu trả lời. Tôi thấy câu trả lời này hữu ích hơn câu trả lời được chấp nhận.
Ronnel Martinez ngày

10

Tôi biết câu hỏi là về dấu gạch chéo nhưng tôi đã tìm thấy bài đăng này trong quá trình tìm kiếm các dấu gạch chéo (cả ở đuôi và đầu của một chuỗi ký tự), vì mọi người sẽ cần giải pháp này tôi sẽ đăng một bài ở đây:

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

CẬP NHẬT :

như @Stephen R đã đề cập trong các bình luận, nếu bạn muốn loại bỏ cả dấu gạch chéo và dấu gạch chéo ngược ở cả đuôi và đầu của một chuỗi ký tự, bạn sẽ viết:

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

Đây là câu trả lời thực sự!
Có thể PERK

1
Nếu bạn muốn cắt bớt cả dấu gạch chéo và dấu gạch chéo ngược:.replace(/^[\\/]+|[\\/]+$/g, '')
Stephen R

2

Cách dễ dàng tôi biết là

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

Điều này sau đó sẽ kiểm tra a / ở cuối và nếu nó xóa nó nếu nó không trả về chuỗi của bạn như ban đầu

Chỉ có một điều mà tôi không thể nhận xét về @ThiefMaster wow bạn không quan tâm đến bộ nhớ, bạn có chạy một cái đế chỉ cho một cái không?

Đã sửa lỗi hiệu chỉnh cho chỉ số dựa trên chuỗi trên chuỗi.


2

Đây là một ví dụ url nhỏ.

var currentUrl = location.href;

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

đăng nhập url mới

console.log(currentUrl);

2

Dựa trên câu trả lời của @vdegenne ... cách thoát y:

Dấu gạch chéo đơn:

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

Dấu gạch chéo đơn hoặc liên tiếp:

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

Dấu gạch chéo hàng đầu:

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

Dấu gạch chéo đơn hoặc liên tiếp:

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

Dấu gạch chéo đơn hàng đầu và dấu vết:

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

Dấu gạch chéo đơn hàng đầu hoặc liên tiếp:

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

Để xử lý cả dấu gạch chéo và dấu gạch chéo ngược , hãy thay thế \/bằng[\\/]


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

giải pháp khác.


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

2
subtring? Bên cạnh đó, nó loại bỏ dấu gạch chéo đầu tiên và mọi thứ sau nó.
ThiefMaster

@ThiefMaster: Thật sao? Bạn không thể nói rằng tôi có nghĩa là substring? Ngoài ra, tôi có nghĩa là xóa dấu gạch chéo đầu tiên và mọi thứ sau nó vì nó điền vào hóa đơn cho câu hỏi và dữ liệu ví dụ được đăng.
josh.trow

Vâng, bình luận của anh ấy nói rằng anh ấy muốn xóa dấu gạch chéo
ThiefMaster

@ThiefMaster: Mà theo ví dụ của anh ấy, mã của tôi thì có.
josh.trow

1
Không có lý do tại sao không sử dụng điều này tại bất kỳ thời điểm nào nếu các url thay đổi thành "đủ điều kiện" có http: // điều này sẽ không hoạt động và bất kỳ liên kết nào với / ở giữa sẽ không hoạt động cho các nhân viên của Google
Barkermn01
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.