Hapus string di awal URL

105

Saya ingin menghapus bagian " www." dari awal string URL

Misalnya dalam kasus uji ini:

misal www.test.comtest.com
misal www.testwww.comtestwww.com
misal testwww.comtestwww.com(jika tidak ada)

Apakah saya perlu menggunakan Regexp atau apakah ada fungsi pintar?

Lupo
sumber
Ini adalah pertanyaan yang sangat lama, tetapi perlu ditunjukkan di 2019 Anda harus menggunakan pengurai URL untuk ini daripada regex
mikemaccana
1
Pemilik www.comakan sangat sedih atas semua tanggapan ini.
BrainCore

Jawaban:

234

Bergantung pada apa yang Anda butuhkan, Anda memiliki beberapa pilihan, yang dapat Anda lakukan:

// 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\.)/,"");
nicosantangelo
sumber
24
mungkin yang terakhir adalah solusi optimal.
Christoph
11
ini BUKAN solusi optimal. Membuat regexp untuk menghapus substring adalah tindakan berlebihan!
berezovskyi
4
@berezovskiy itu tergantung pada apa yang Anda lakukan, jika misalnya Anda membuat game di mana kinerja adalah kunci Anda benar, dalam banyak kasus IMO jauh lebih baik untuk eksplisit dan tidak memperkenalkan bug untuk kinerja minimal. memukul. Meskipun demikian, jawabannya memberikan 3 contoh berbeda untuk dipilih.
nicosantangelo
7
Saya sangat menyukai opsi terakhir. Meskipun benar bahwa menggunakan slice()adalah sedikit lebih cepat, ini adalah di 99,9% dari skenario sebuah relevan, optimasi prematur. Penulisannya replace(/^www\./,"") jelas, kode yang terdokumentasi sendiri.
Tom Lord
5
solusi pertama dan kedua akan gagal pada contoh kasus ketiga. tutut
Yarek T
13

Ya, ada RegExp tetapi Anda tidak perlu menggunakannya atau fungsi "pintar":

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

Jika string selalu memiliki format yang sama, simple substr()sudah cukup.

var newString = originalStrint.substr(4)
talnicolas
sumber
4
testwww.comtwww.com= GAGAL
Christoph
1
@Christoph Ya, ngomong-ngomong dia mengedit pertanyaannya setelah jawaban saya, itulah mengapa saya menyebutkan jika string selalu dalam format yang sama .
talnicolas
14
@Christoph dan itu akan menjadi " testwww.comwww.com= FAIL"
talnicolas
6

Baik secara manual, seperti

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

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

atau gunakan saja .replace():

str = str.replace( rmv, '' );
jAndy
sumber
1
Saya suka pendekatan manual, karena string dapat berasal dari variabel tanpa risiko mengacaukan regex.
nha
5

Anda dapat membebani prototipe String dengan fungsi removePrefix:

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

pemakaian:

const domain = "www.test.com".removePrefix("www."); // test.com
Flavien Volken
sumber
Saya percaya ini adalah praktik yang buruk untuk memodifikasi prototipe String
dman
Ya, seperti membebani prototipe apa pun, risikonya adalah memiliki nama yang bertabrakan dengan metode lain (di sini removePrefixdi Stringkelas), sebaliknya cukup nyaman untuk hanya memanggil .removePrefix. Terserah kamu.
Flavien Volken
2

Coba berikut ini

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

Anda dapat memotong url dan menggunakan response.sendredirect (url baru), ini akan membawa Anda ke halaman yang sama dengan url baru

Ofer
sumber
0

Cara lain:

Regex.Replace(urlString, "www.(.+)", "$1");
piris
sumber