Eliminar la cadena al principio de una URL

105

Quiero eliminar el "www. " del principio de una cadena de URL.

Por ejemplo, en estos casos de prueba:

p. ej. → p. ej. www.test.comtest.com
p. ej. → (si no existe)www.testwww.comtestwww.com
testwww.comtestwww.com

¿Necesito usar Regexp o hay una función inteligente?

Lupo
fuente
Esta es una pregunta muy antigua, pero vale la pena señalar que en el año 2019 debería estar usando un analizador URL de este lugar de una expresión regular
mikemaccana
1
El dueño de www.comva a estar terriblemente triste con todas estas respuestas.
BrainCore

Respuestas:

234

Depende de lo que necesite, tiene un par de opciones, puede hacer:

// 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
fuente
24
probablemente la última sea la solución óptima.
Christoph
11
NO es la solución óptima. ¡Crear una expresión regular para eliminar una subcadena es una exageración!
berezovskyi
4
@berezovskiy, depende de lo que estés haciendo, si por ejemplo estás creando un juego donde el rendimiento es clave, tienes razón, en la mayoría de los casos IMO es mucho mejor ser explícito y no introducir un error por un rendimiento mínimo. golpear. No obstante, la respuesta proporciona 3 ejemplos diferentes para elegir.
nicosantangelo
7
Prefiero fuertemente la última opción. Si bien es cierto que el uso slice()es un poco más rápido, en el 99,9% de los escenarios se trata de una optimización prematura e irrelevante. La escritura replace(/^www\./,"") es un código claro y autodocumentado.
Tom Lord
5
La primera y la segunda solución fallarán en el tercer caso de ejemplo. tutut
Yarek T
13

Sí, hay una expresión regular, pero no es necesario utilizarla ni ninguna función "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
fuente
11

Si la cadena tiene siempre el mismo formato, un simple substr()debería ser suficiente.

var newString = originalStrint.substr(4)
talnicolas
fuente
4
testwww.comtwww.com= FAIL
Christoph
1
@Christoph Ya, por cierto editó su pregunta después de mi respuesta, por eso mencioné si la cadena siempre tiene el mismo formato .
talnicolas
14
@Christoph y sería " testwww.comwww.com= FAIL"
talnicolas
6

O manualmente, como

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

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

o simplemente usa .replace():

str = str.replace( rmv, '' );
jAndy
fuente
1
Me gusta el enfoque manual, ya que las cadenas pueden provenir de variables sin riesgo de estropear las expresiones regulares.
nha
5

Puede sobrecargar el prototipo String con una función 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
fuente
Creo que es una mala práctica modificar el prototipo de String
dman
Sí, como sobrecargar cualquier prototipo, el riesgo es tener una colisión de nombres con otro método (aquí removePrefixen la Stringclase), a la inversa, es bastante conveniente simplemente llamar .removePrefix. Tu decides.
Flavien Volken
2

Prueba lo siguiente

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

Puede cortar la URL y usar response.sendredirect (nueva URL), esto lo llevará a la misma página con la nueva URL

Ofer
fuente
0

De otra manera:

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