Удалите строку в начале URL


108

Я хочу удалить www.часть " " из начала строки URL

Например, в этих тестовых случаях:

например www.test.comtest.com
например www.testwww.comtestwww.com
например testwww.comtestwww.com(если он не существует)

Мне нужно использовать Regexp или есть умная функция?


Это очень старый вопрос, но стоит отметить, что в 2019 году вам следует использовать для этого парсер URL-адресов, а не регулярное выражение
mikemaccana

1
Владелец www.comбудет ужасно огорчен всеми этими отзывами.
BrainCore 08

Ответы:


237

В зависимости от того, что вам нужно, у вас есть несколько вариантов, вы можете:

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

25
наверное, последний вариант - оптимальное решение.
Christoph

11
это НЕ оптимальное решение. Создание регулярного выражения для удаления подстроки - излишество!
Березовский

4
@berezovskiy, это зависит от того, что вы делаете, например, если вы делаете игру, в которой производительность является ключевой, вы правы, в большинстве случаев IMO намного лучше быть явным и не вводить ошибку для минимальной производительности ударить. Тем не менее, ответ предлагает 3 разных примера на выбор.
Никосантанджело

7
Я сильно предпочитаю последний вариант. Хотя это правда, что использование slice()происходит немного быстрее, в 99,9% сценариев это неуместная и преждевременная оптимизация. Написание replace(/^www\./,"") четкое, самодокументирующийся код.
Том Лорд

6
первое и второе решения не помогут в третьем примере. тутут
Ярек Т

13

Да, RegExp есть, но использовать его или какую-либо «умную» функцию не нужно:

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

Если строка всегда имеет один и тот же формат, достаточно простого substr().

var newString = originalStrint.substr(4)

4
testwww.comtwww.com= ОТКАЗ
Christoph

1
@Christoph Ya, кстати, он отредактировал свой вопрос после моего ответа, поэтому я упомянул , всегда ли строка имеет один и тот же формат .
talnicolas

14
@Christoph, и это будет « testwww.comwww.com= FAIL»
talnicolas

7

Либо вручную, как

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

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

или просто используйте .replace():

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

1
Мне нравится ручной подход, поскольку строки могут поступать из переменной без риска испортить регулярные выражения.
nha

5

Вы можете перегрузить прототип String с помощью функции removePrefix:

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

использование:

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

Я считаю, что модифицировать прототип String
dman

Да, как и при перегрузке любого прототипа, существует риск столкновения имени с другим методом (здесь, removePrefixв Stringклассе), и наоборот, довольно удобно просто вызвать .removePrefix. Тебе решать.
Флавьен Волкен,


0

Вы можете вырезать URL-адрес и использовать response.sendredirect (новый URL-адрес), это приведет вас к той же странице с новым URL-адресом.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.