Supprimer la chaîne au début d'une URL

105

Je souhaite supprimer la www.partie " " du début d'une chaîne d'URL

Par exemple dans ces cas de test:

par exemple → par exemple www.test.comtest.com
par exemple → (s'il n'existe pas)www.testwww.comtestwww.com
testwww.comtestwww.com

Dois-je utiliser Regexp ou existe-t-il une fonction intelligente?

Lupo
la source
C'est une question très ancienne, mais cela vaut la peine de souligner qu'en 2019, vous devriez utiliser un analyseur d'URL pour cela plutôt qu'une expression
régulière
1
Le propriétaire de www.comva être terriblement triste de toutes ces réponses.
BrainCore

Réponses:

234

Cela dépend de ce dont vous avez besoin, vous avez plusieurs choix, vous pouvez faire:

// 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
la source
25
probablement la dernière est la solution optimale.
Christoph
11
ce n'est PAS la solution optimale. Créer une expression rationnelle pour supprimer une sous-chaîne est une exagération!
berezovskyi
4
@berezovskiy cela dépend de ce que vous faites, si par exemple vous créez un jeu où les performances sont essentielles, vous avez raison, dans la plupart des cas, l'OMI est préférable d'être explicite et de ne pas introduire de bogue pour une performance minimale frappé. Néanmoins, la réponse fournit 3 exemples différents parmi lesquels choisir.
nicosantangelo
7
Je préfère fortement la dernière option. S'il est vrai que l'utilisation slice()est légèrement plus rapide, il s'agit dans 99,9% des scénarios d'une optimisation prématurée et non pertinente. L'écriture replace(/^www\./,"") est un code clair et auto-documenté.
Tom Lord
5
la première et la deuxième solution échoueront le troisième cas d'exemple. tutut
Yarek T
13

Oui, il existe une RegExp mais vous n'avez pas besoin de l'utiliser ou de toute fonction "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);
}
berezovskyi
la source
11

Si la chaîne a toujours le même format, un simple substr()devrait suffire.

var newString = originalStrint.substr(4)
talnicolas
la source
4
testwww.comtwww.com= FAIL
Christoph
1
@Christoph Ya, au fait qu'il a édité sa question après ma réponse, c'est pourquoi j'ai mentionné si la chaîne a toujours le même format .
talnicolas
14
@Christoph et ce serait " testwww.comwww.com= FAIL"
talnicolas
6

Soit manuellement, comme

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

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

ou utilisez simplement .replace():

str = str.replace( rmv, '' );
jAndy
la source
1
J'aime l'approche manuelle, car les chaînes peuvent provenir de variables sans risque de perturber les expressions rationnelles.
nha
5

Vous pouvez surcharger le prototype String avec une fonction removePrefix:

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

usage:

const domain = "www.test.com".removePrefix("www."); // test.com
Flavien Volken
la source
Je crois que c'est une mauvaise pratique de modifier le prototype de String
dman
Oui, comme pour surcharger n'importe quel prototype, le risque est d'avoir une collision de nom avec une autre méthode (ici removePrefixsur la Stringclasse), à ​​l'inverse il est assez pratique de simplement appeler .removePrefix. C'est à vous.
Flavien Volken
2

Essayez ce qui suit

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

Vous pouvez couper l'url et utiliser response.sendredirect (nouvelle url), cela vous amènera à la même page avec la nouvelle URL

Ofer
la source
0

Autrement:

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