Удалите строку в начале 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. Тебе решать.
Флавьен Волкен,
2

Попробуйте следующее

var original = 'www.test.com';
var stripped = original.substring(4);
ДжаредПар
источник
0

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

Офер
источник
0

По-другому:

Regex.Replace(urlString, "www.(.+)", "$1");
пирис
источник