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?


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\.)/,"");

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);
}

11

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

var newString = originalStrint.substr(4)

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, '' );

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

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);

0

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


0

De otra manera:

Regex.Replace(urlString, "www.(.+)", "$1");
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.