Như bạn đã chấp nhận một câu trả lời. Để hiển thị một số mở rộng hơn phù hợp và kiểm soát trận đấu, điều này có thể giúp bạn trong tương lai:
var url = 'http://link.com//whatever///';
var set = url.match(/([^:]\/{2,3})/g); // Match (NOT ":") followed by (2 OR 3 "/")
for (var str in set) {
// Modify the data you have
var replace_with = set[str].substr(0, 1) + '/';
// Replace the match
url = url.replace(set[str], replace_with);
}
console.log(url);
Will đầu ra:
http://link.com/whatever/
Doublets sẽ không thành vấn đề trong tình huống của bạn. Nếu bạn có chuỗi này:
var url = 'http://link.com//om/om/om/om/om///';
Mảng set
của bạn sẽ chứa nhiều m//
. Một chút dư thừa, vì vòng lặp sẽ thấy biến đó một vài lần. Điều tốt đẹp là String.replace()
thay thế không có gì nếu nó không tìm thấy gì, vì vậy không có hại gì được thực hiện.
Những gì bạn có thể làm là loại bỏ các bản sao từ set
trước, nhưng điều đó hầu như sẽ yêu cầu cùng một lượng tài nguyên như chỉ cho phép vòng lặp đi qua chúng.
Chúc may mắn!
Nguồn
2013-03-26 14:30:59
Khi tôi cố gắng thay thế các kết quả khớp bằng một dấu gạch chéo về phía trước, trước tiên anh ta trả về http: /link.co/whateve/ và thứ hai ttp: //link.co/whateve/. Đối với một số lý do nó loại bỏ ký tự đầu tiên trước đó. – geochr
Ồ, bạn muốn _replace_ chúng, và không chỉ _match_ chúng? Đó là một sự khác biệt quan trọng. – Halcyon
@JeffShaver no: nó loại bỏ một số ký tự –