Bir URL'nin başındaki dizeyi kaldırın


106

www.Bir URL dizesinin başındaki " " kısmını kaldırmak istiyorum

Örneğin bu test durumlarında:

ör. www.test.comtest.com
ör. www.testwww.comtestwww.com
ör. testwww.comtestwww.com(yoksa)

Regexp kullanmam gerekir mi yoksa akıllı bir işlev var mı?


Bu çok eski bir soru, ancak 2019'da bunun için bir regex yerine bir URL ayrıştırıcı kullanmanız gerektiğine dikkat
çekmeye değer

1
www.comTüm bu yanıtların sahibi çok üzülecek.
BrainCore

Yanıtlar:


235

Neye ihtiyacınız olduğuna bağlı olarak birkaç seçeneğiniz var, şunları yapabilirsiniz:

// 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\.)/,"");

25
Muhtemelen sonuncusu en uygun çözümdür.
Christoph

11
optimal çözüm DEĞİLDİR. Bir alt dizeyi kaldırmak için bir normal ifade oluşturmak abartıdır!
berezovskyi

4
@berezovskiy, ne yaptığınıza bağlıdır, örneğin performansın doğru olduğu bir oyun yapıyorsanız, çoğu durumda IMO açık olmaktan çok daha iyidir ve minimum performans için bir hata ortaya koymaz isabet. Yine de cevap, aralarından seçim yapabileceğiniz 3 farklı örnek sunar.
nicosantangelo

7
Son seçeneği şiddetle tercih ediyorum. O kullanarak doğrudur iken slice()ise biraz daha hızlı, bu senaryolardan 99.9% ilgisiz, prematüre optimizasyon içindedir. Yazmak replace(/^www\./,"") açık, kendi kendini belgeleyen bir koddur.
Tom Lord

5
birinci ve ikinci çözüm, üçüncü örnek durumunda başarısız olacaktır. tutut
Yarek T

13

Evet, bir RegExp var ancak onu veya herhangi bir "akıllı" işlevi kullanmanıza gerek yok:

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

Dizge her zaman aynı biçime sahipse, basit bir şey substr()yeterli olmalıdır.

var newString = originalStrint.substr(4)

4
testwww.comtwww.com= FAIL
Christoph

1
@Christoph Ya, cevabımdan sonra sorusunu düzenlediği için , dizenin her zaman aynı formatta olup olmadığından bahsetmiştim .
talnicolas

14
@Christoph ve " testwww.comwww.com= BAŞARISIZ" olacaktır
talnicolas

6

Ya manuel olarak

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

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

veya sadece şunu kullanın .replace():

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

1
Dizeler, regex'leri bozma riski olmadan değişkenden gelebildiği için manuel yaklaşımı seviyorum.
nha

5

String prototipini bir removePrefix işleviyle aşırı yükleyebilirsiniz:

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

kullanım:

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

String'in prototipini değiştirmenin kötü bir uygulama olduğuna inanıyorum
dman

Evet, herhangi bir prototip aşırı yükleme gibi risk (burada başka yöntemle bir isim çarpışma sahip olmaktır removePrefixüzerine Stringsınıfından), tersine sadece çağrısına oldukça uygundur.removePrefix . Sana kalmış.
Flavien Volken

2

Takip etmeyi dene

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

0

URL'yi kesip response.sendredirect (yeni url) kullanabilirsiniz, bu sizi yeni url ile aynı sayfaya götürecektir


0

Diğer yol:

Regex.Replace(urlString, "www.(.+)", "$1");
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.