Usuń ciąg z początku adresu URL


106

Chcę usunąć część „ www.” z początku ciągu adresu URL

Na przykład w tych przypadkach testowych:

np. www.test.comtest.com
np. www.testwww.comtestwww.com
np. testwww.comtestwww.com(jeśli nie istnieje)

Czy muszę używać Regexp, czy jest dostępna inteligentna funkcja?


To bardzo stare pytanie, ale warto wskazać, że w 2019 roku powinieneś używać do tego parsera URL zamiast wyrażenia regularnego
mikemaccana

1
Właścicielka www.combędzie strasznie smutna z powodu tych wszystkich odpowiedzi.
BrainCore

Odpowiedzi:


235

W zależności od tego, czego potrzebujesz, masz kilka możliwości, możesz zrobić:

// 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
chyba to ostatnie jest rozwiązaniem optymalnym.
Christoph

11
NIE jest to optymalne rozwiązanie. Tworzenie wyrażenia regularnego do usuwania podciągu to przesada!
berezovskyi

4
@berezovskiy to zależy od tego, co robisz, jeśli na przykład tworzysz grę, w której kluczowa jest wydajność, masz rację, w większości przypadków IMO jest znacznie lepsze, aby było jasne i nie wprowadzaj błędu przy minimalnej wydajności trafienie. Niemniej jednak odpowiedź zawiera 3 różne przykłady do wyboru.
nicosantangelo

7
Zdecydowanie wolę ostatnią opcję. Chociaż prawdą jest, że używanie slice()jest nieco szybsze, w 99,9% scenariuszy jest to nieistotna, przedwczesna optymalizacja. Pisanie replace(/^www\./,"") jest przejrzystym, samodokumentującym się kodem.
Tom Lord

5
pierwsze i drugie rozwiązanie zawiodą w trzecim przykładzie. tutut
Yarek T

13

Tak, istnieje wyrażenie RegExp, ale nie musisz go używać ani żadnej „inteligentnej” funkcji:

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

Jeśli łańcuch ma zawsze ten sam format, substr()wystarczy prosty .

var newString = originalStrint.substr(4)

4
testwww.comtwww.com= FAIL
Christoph

1
@Christoph Ya, swoją drogą zredagował swoje pytanie po mojej odpowiedzi, dlatego wspomniałem, czy string ma zawsze ten sam format .
talnicolas

14
@Christoph i byłoby to " testwww.comwww.com= FAIL"
talnicolas

6

Albo ręcznie, na przykład

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

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

lub po prostu użyj .replace():

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

1
Podoba mi się podejście ręczne, ponieważ ciągi znaków mogą pochodzić ze zmiennej bez ryzyka zepsucia wyrażeń regularnych.
nha

5

Możesz przeciążyć prototyp String funkcją removePrefix:

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

stosowanie:

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

Uważam, że modyfikowanie prototypu String
dman

Tak, podobnie jak w przypadku przeciążenia dowolnego prototypu, istnieje ryzyko kolizji nazwy z inną metodą (tutaj removePrefixw Stringklasie), i odwrotnie, wystarczy zadzwonić .removePrefix. To zależy od Ciebie.
Flavien Volken

2

Spróbuj wykonać następujące czynności

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

0

Możesz wyciąć adres URL i użyć response.sendredirect (nowy adres URL), to przeniesie Cię na tę samą stronę z nowym adresem URL


0

Inny sposób:

Regex.Replace(urlString, "www.(.+)", "$1");
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.