Xóa chuỗi trên đầu URL


105

Tôi muốn xóa phần " www." khỏi đầu chuỗi URL

Ví dụ trong các trường hợp thử nghiệm này:

vd www.test.comtest.com
vd www.testwww.comtestwww.com
vd testwww.com→ → testwww.com(nếu nó không tồn tại)

Tôi có cần sử dụng Regexp hoặc có một chức năng thông minh nào không?


Đây là một câu hỏi rất cũ, nhưng đó là giá trị chỉ ra vào năm 2019 bạn nên sử dụng một phân tích cú pháp URL cho điều này chứ không phải là một regex
mikemaccana

1
Chủ sở hữu của www.comsẽ rất buồn trước tất cả các phản hồi này.
BrainCore

Câu trả lời:


234

Tùy thuộc vào những gì bạn cần, bạn có một số lựa chọn, bạn có thể làm:

// this will replace the first occurrence of "www." and return "testwww.com"
"www.testwww.com".replace("www.", "");

// this will slice the first four characters and return "testwww.com"
"www.testwww.com".slice(4);

// this will replace the www. only if it is at the beginning
"www.testwww.com".replace(/^(www\.)/,"");

24
có lẽ cái cuối cùng là giải pháp tối ưu.
Christoph

11
nó KHÔNG PHẢI là giải pháp tối ưu. Tạo một regexp để loại bỏ một chuỗi con là một việc làm quá mức cần thiết!
berezovskyi

4
@berezovskiy, điều đó phụ thuộc vào những gì bạn đang làm, ví dụ: nếu bạn đang tạo một trò chơi mà hiệu suất là chìa khóa thì bạn đúng, trong hầu hết các trường hợp, IMO tốt hơn nhiều nên rõ ràng và không giới thiệu lỗi để đạt được hiệu suất tối thiểu đánh. Tuy nhiên, câu trả lời cung cấp 3 ví dụ khác nhau để bạn lựa chọn.
nicosantangelo

7
Tôi thực sự thích lựa chọn cuối cùng. Trong khi đó là sự thật rằng việc sử dụng slice()hơi nhanh hơn, điều này là 99,9% của kịch bản một không thích hợp, tối ưu hóa quá sớm. Viết replace(/^www\./,"") rõ ràng, mã tự tài liệu.
Tom Lord

5
giải pháp thứ nhất và thứ hai sẽ thất bại trong trường hợp ví dụ thứ ba. tutut
Yarek T

13

Có, có một RegExp nhưng bạn không cần sử dụng nó hoặc bất kỳ chức năng "thông minh" nào:

var url = "www.testwww.com";
var PREFIX = "www.";
if (url.indexOf(PREFIX) == 0) {
  // PREFIX is exactly at the beginning
  url = url.slice(PREFIX.length);
}

11

Nếu chuỗi luôn có cùng một định dạng, một chuỗi đơn giản là substr()đủ.

var newString = originalStrint.substr(4)

4
testwww.comtwww.com= FAIL
Christoph

1
@Christoph Ya, nhân tiện anh ấy đã chỉnh sửa câu hỏi của mình sau câu trả lời của tôi, đó là lý do tại sao tôi đề cập đến việc nếu chuỗi luôn có cùng một định dạng .
talnicolas

14
@Christoph và nó sẽ là " testwww.comwww.com= FAIL"
talnicolas

6

Hoặc theo cách thủ công, như

var str = "www.test.com",
    rmv = "www.";

str = str.slice( str.indexOf( rmv ) + rmv.length );

hoặc chỉ sử dụng .replace():

str = str.replace( rmv, '' );

1
Tôi thích cách tiếp cận thủ công, vì các chuỗi có thể đến từ các biến mà không có nguy cơ làm rối tung các regex.
nha

5

Bạn có thể quá tải nguyên mẫu chuỗi bằng hàm removePrefix:

String.prototype.removePrefix = function (prefix) {
    const hasPrefix = this.indexOf(prefix) === 0;
    return hasPrefix ? this.substr(prefix.length) : this.toString();
};

sử dụng:

const domain = "www.test.com".removePrefix("www."); // test.com

Tôi tin rằng việc sửa đổi nguyên mẫu của String là một việc làm
sai trái

Đúng vậy, giống như quá tải bất kỳ nguyên mẫu nào, rủi ro là có xung đột tên với một phương thức khác (ở đây removePrefixtrên Stringlớp), ngược lại, khá thuận tiện khi chỉ cần gọi .removePrefix. Tuỳ bạn.
Flavien Volken

2

Hãy thử những điều sau đây

var original = 'www.test.com';
var stripped = original.substring(4);

0

Bạn có thể cắt url và sử dụng response.sendredirect (url mới), điều này sẽ đưa bạn đến cùng một trang với url mới


0

Cách khác:

Regex.Replace(urlString, "www.(.+)", "$1");
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.