Видаліть рядок на початку URL-адреси


105

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

Наприклад, у цих тестових випадках:

наприклад www.test.comtest.com
наприклад www.testwww.comtestwww.com
наприклад testwww.comtestwww.com(якщо його немає)

Чи потрібно використовувати Regexp чи є розумна функція?


Це дуже давнє запитання, але варто зазначити, що у 2019 році вам слід скористатися URL-аналізатором для цього, а не регулярним виразом
mikemaccana

1
Власник компанії www.comбуде жахливо сумний на всі ці відповіді.
BrainCore

Відповіді:


234

Залежить від того, що вам потрібно, у вас є пара варіантів, ви можете:

// 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
мабуть, останній - оптимальне рішення.
Крістоф

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

4
@berezovskiy - це залежить від того, чим ти займаєшся, якщо, наприклад, ти робиш гру, де ефективність є ключовою, ти маєш рацію, у більшості випадків IMO набагато краще бути явним і не вводити помилку для мінімальної перф хіт. Тим не менш, відповідь пропонує 3 різні приклади на вибір.
nicosantangelo

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

5
перше і друге рішення не зможуть третій приклад. tutut
T

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= FAIL
Крістоф

1
@Christoph Ya, до речі, він редагував своє запитання після моєї відповіді, тому я зазначив, що рядок завжди має однаковий формат .
тальніколі

14
@Christoph, і це було б " testwww.comwww.com= FAIL"
тальніколі

6

Або вручну, як

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.