Remova a string no início de um URL

105

Quero remover a www.parte " " do início de uma string de URL

Por exemplo, nestes casos de teste:

por exemplo → por exemplo www.test.comtest.com
por exemplo → (se não existir)www.testwww.comtestwww.com
testwww.comtestwww.com

Preciso usar o Regexp ou há uma função inteligente?

Lupo
fonte
Esta é uma pergunta muito antiga, mas vale a pena ressaltar que em 2019 você deve usar um analisador de URL para isso em vez de um regex
mikemaccana
1
O dono do www.comficará terrivelmente triste com todas essas respostas.
BrainCore

Respostas:

234

Depende do que você precisa, você tem algumas opções que pode fazer:

// 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
fonte
24
provavelmente o último é a solução ótima.
Christoph
11
NÃO é a solução ideal. Criar uma regexp para remover uma substring é um exagero!
berezovskyi
4
@berezovskiy depende do que você está fazendo, se por exemplo você está fazendo um jogo onde o desempenho é fundamental, você está certo, na maioria dos casos IMO é muito melhor ser explícito e não introduzir um bug para um desempenho mínimo acertar. No entanto, a resposta fornece 3 exemplos diferentes para você escolher.
nicosantangelo
7
Eu prefiro fortemente a última opção. Embora seja verdade que o uso slice()é ligeiramente mais rápido, isso é em 99,9% dos cenários uma otimização irrelevante e prematura. Escrever replace(/^www\./,"") é um código claro e autodocumentado.
Tom Lord
5
a primeira e a segunda solução falharão no terceiro caso de exemplo. tutut
Yarek T
13

Sim, existe um RegExp, mas você não precisa usá-lo ou qualquer função "inteligente":

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
fonte
11

Se a string tem sempre o mesmo formato, um simples substr()deve ser suficiente.

var newString = originalStrint.substr(4)
talnicolas
fonte
4
testwww.comtwww.com= FALHA
Christoph
1
@Christoph Ya, pelo jeito que ele editou sua pergunta depois da minha resposta, é por isso que mencionei se a string tem sempre o mesmo formato .
talnicolas
14
@Christoph e seria " testwww.comwww.com= FALHA"
talnicolas
6

Tanto manualmente, como

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

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

ou apenas use .replace():

str = str.replace( rmv, '' );
Andy
fonte
1
Eu gosto da abordagem manual, já que as strings podem vir de variáveis ​​sem risco de bagunçar as regexes.
nha
5

Você pode sobrecarregar o protótipo String com uma função removePrefix:

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

uso:

const domain = "www.test.com".removePrefix("www."); // test.com
Flavien Volken
fonte
Eu acredito que é uma má prática modificar o protótipo do String
dman
Sim, como sobrecarregar qualquer protótipo, o risco é que haja uma colisão de nome com outro método (aqui removePrefixna Stringaula), por outro lado é bastante conveniente apenas chamar .removePrefix. Você decide.
Flavien Volken
2

Tente o seguinte

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

Você pode cortar o url e usar response.sendredirect (novo url), isso o levará para a mesma página com o novo url

Ofer
fonte
0

Outra maneira:

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