Entfernen Sie die Zeichenfolge am Anfang einer URL


104

Ich möchte den www.Teil " " vom Anfang einer URL-Zeichenfolge entfernen

Zum Beispiel in diesen Testfällen:

zB www.test.comtest.com
zB www.testwww.comtestwww.com
zB testwww.comtestwww.com(falls nicht vorhanden)

Muss ich Regexp verwenden oder gibt es eine intelligente Funktion?


Dies ist eine sehr alte Frage, aber es ist erwähnenswert, dass Sie 2019 einen URL-Parser verwenden sollten, anstatt einen
regulären Ausdruck

1
Der Besitzer von www.comwird bei all diesen Antworten furchtbar traurig sein.
BrainCore

Antworten:


233

Abhängig davon, was Sie brauchen, haben Sie mehrere Möglichkeiten:

// 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
wahrscheinlich ist der letzte die optimale Lösung.
Christoph

11
Es ist NICHT die optimale Lösung. Das Erstellen eines regulären Ausdrucks zum Entfernen eines Teilstrings ist ein Overkill!
berezovskyi

4
@berezovskiy es hängt davon ab, was Sie tun, wenn Sie zum Beispiel ein Spiel machen, bei dem Leistung der Schlüssel ist, haben Sie Recht. In den meisten Fällen ist IMO viel besser, explizit zu sein und keinen Fehler für eine minimale Leistung einzuführen schlagen. Die Antwort enthält jedoch 3 verschiedene Beispiele zur Auswahl.
Nicosantangelo

7
Ich bevorzuge die letzte Option. Es stimmt zwar, dass die Verwendung slice()ist etwas schneller, dann ist dies in 99,9% der Szenarien eine irrelevante, vorzeitige Optimierung. Das Schreiben replace(/^www\./,"") ist klarer, selbstdokumentierender Code.
Tom Lord

5
Die erste und zweite Lösung schlagen im dritten Beispielfall fehl. Tutut
Yarek T

13

Ja, es gibt ein RegExp, aber Sie müssen es nicht verwenden oder eine "intelligente" Funktion:

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

Wenn die Zeichenfolge immer das gleiche Format hat, sollte eine einfache Zeichenfolge substr()ausreichen.

var newString = originalStrint.substr(4)

4
testwww.comtwww.com= FAIL
Christoph

1
@Christoph Ya, übrigens hat er seine Frage nach meiner Antwort bearbeitet, deshalb habe ich erwähnt, ob die Zeichenfolge immer das gleiche Format hat .
Talnicolas

14
@Christoph und es wäre " testwww.comwww.com= FAIL"
talnicolas

6

Entweder manuell, wie

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

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

oder einfach benutzen .replace():

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

1
Ich mag den manuellen Ansatz, da die Zeichenfolgen von Variablen stammen können, ohne dass die Gefahr besteht, dass die regulären Ausdrücke durcheinander gebracht werden.
nha

5

Sie können den String-Prototyp mit einer removePrefix-Funktion überladen:

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

Verwendung:

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

Ich
halte

Ja, wie beim Überladen eines Prototyps besteht das Risiko, dass ein Name mit einer anderen Methode (hier removePrefixin der StringKlasse) kollidiert. Umgekehrt ist es sehr praktisch, einfach aufzurufen .removePrefix. Es liegt an dir.
Flavien Volken

2

Versuche Folgendes

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

0

Sie können die URL ausschneiden und response.sendredirect (neue URL) verwenden. Dadurch gelangen Sie zur gleichen Seite wie die neue URL


0

Ein anderer Weg:

Regex.Replace(urlString, "www.(.+)", "$1");
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.