Rimuovi la stringa all'inizio di un URL


105

Voglio rimuovere la parte " www." dall'inizio di una stringa URL

Ad esempio in questi casi di test:

ad esempio → ad esempio www.test.comtest.com
ad esempio → (se non esiste)www.testwww.comtestwww.com
testwww.comtestwww.com

Devo usare Regexp o c'è una funzione intelligente?


Questa è una domanda molto vecchia, ma vale la pena sottolineare che nel 2019 dovresti utilizzare un parser URL per questo piuttosto che
un'espressione regolare

1
Il proprietario di www.comsarà terribilmente triste per tutte queste risposte.
BrainCore

Risposte:


234

Dipende da cosa ti serve, hai un paio di scelte, puoi fare:

// 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
probabilmente l'ultima è la soluzione ottimale.
Christoph

11
NON è la soluzione ottimale. Creare una regexp per rimuovere una sottostringa è eccessivo!
berezovskyi

4
@berezovskiy dipende da cosa stai facendo, se ad esempio stai realizzando un gioco in cui le prestazioni sono fondamentali hai ragione, nella maggior parte dei casi IMO è molto meglio essere esplicito e non introdurre un bug per una prestazione minima colpire. Tuttavia, la risposta fornisce 3 diversi esempi tra cui scegliere.
nicosantangelo

7
Preferisco fortemente l'ultima opzione. Sebbene sia vero che l'utilizzo slice()è leggermente più veloce, nel 99,9% degli scenari si tratta di un'ottimizzazione prematura e irrilevante. La scrittura replace(/^www\./,"") è un codice chiaro e auto-documentante.
Tom Lord

5
la prima e la seconda soluzione falliranno nel terzo caso esemplificativo. tutut
Yarek T

13

Sì, esiste una RegExp ma non è necessario utilizzarla o alcuna funzione "intelligente":

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

Se la stringa ha sempre lo stesso formato, substr()dovrebbe essere sufficiente un semplice .

var newString = originalStrint.substr(4)

4
testwww.comtwww.com= FAIL
Christoph

1
@Christoph Ya, dal modo in cui ha modificato la sua domanda dopo la mia risposta, ecco perché ho detto se la stringa ha sempre lo stesso formato .
talnicolas

14
@Christoph e sarebbe " testwww.comwww.com= FAIL"
talnicolas

6

O manualmente, come

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

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

o usa semplicemente .replace():

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

1
Mi piace l'approccio manuale, poiché le stringhe possono provenire da variabili senza il rischio di rovinare le espressioni regolari.
nha

5

Puoi sovraccaricare il prototipo String con una funzione removePrefix:

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

utilizzo:

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

Credo che sia una cattiva pratica modificare il prototipo di String
dman

Sì, come sovraccaricare qualsiasi prototipo, il rischio è di avere una collisione di nomi con un altro metodo (qui removePrefixsulla Stringclasse), al contrario è abbastanza comodo chiamare .removePrefix. Tocca a voi.
Flavien Volken

2

Prova quanto segue

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

0

Puoi tagliare l'URL e usare response.sendredirect (nuovo URL), questo ti porterà alla stessa pagina con il nuovo URL


0

Un altro modo:

Regex.Replace(urlString, "www.(.+)", "$1");
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.