Регулярное выражение удаляет строку в url

#javascript #jquery #regex

#javascript #jquery #регулярное выражение

Вопрос:

У меня есть URL, подобный https://randomsitename-dd555959b114a0.mydomain.com и хотите удалить часть URL-адреса -dd555959b114a0.

Таким образом, randomsitename — это случайное имя, а домен — статическое доменное имя.

Возможно ли удалить часть с помощью jquery или javascript?

Комментарии:

1. С помощью JavaScript — да (jQuery не предлагает никаких улучшений регулярных выражений). Итак, где вы застряли?

2. Это должно сработать : yourUrlString.replace(/(https?://[a-zA-Z] )-[^-] (.mydomain.com/?)/, '$1$2') .

Ответ №1:

Посмотрите на этот код, который использует регулярное выражение

 var url = "https://randomsitename-dd555959b114a0.mydomain.com";
var res = url.replace(/ *-[^.]*. */g, ".");
 

http://jsfiddle.net/VYw9Y/

Ответ №2:

Обычно лучше всего кодировать для всех возможных случаев, и поскольку дефисы разрешены в любой части доменных имен, вы, скорее всего, захотите использовать более конкретный RexExp, такой как:

 ^                  # start of string
(                  # start first capture group
    [a-z]          # one or more letters
)                  # end first capture group
://                # literal separator
(                  # start second capture group
    [^.-]          # one or more chars except dot or hyphen
)                  # end second capture group
(?:                # start optional non-capture group
    -              # literal hyphen
    [^.]           # one or more chars except dot
)?                 # end optional non-capture group
(                  # start third capture group
    .              # one or more chars
)                  # end third capture group
$                  # end of string
 

Или без комментариев:

 ^([a-z] )://([^.-])(?:-[^.] )?(. )$
 

(Не забывайте избегать косых черт, если вы используете литеральную форму для регулярных выражений, а не создаете их как объекты, т. Е. /literal/form/ Против new RegExp('object/form') )

Используется при замене строки, тогда второй аргумент должен быть: $1://$2$3

Предыдущие ответы не будут выполнены для URL -адресов типа http://foo.bar-baz.com или http://foo-bar.baz-blarg.com .

Ответ №3:

Вы могли бы попробовать это регулярное выражение,

 (.*)(-[^.]*)(.*$)
 

Ваш код должен быть,

 var url = "https://randomsitename-dd555959b114a0.mydomain.com";
var res = url.replace(/(.*)(-[^.]*)(.*$)/, "$1$3");
//=>https://randomsitename.mydomain.com
 

Объяснение:

  • (.*) соответствует любому символу 0 или более раз, и он был сохранен в группе 1, потому что мы помещаем эти символы в paranthesis. Всякий раз, когда механизм регулярных выражений находит - , он перестает сохранять его в group1.
  • (-[^.]*) Начиная с - литерала . сохраняются в group2. Он прекращает сохранение, когда находит буквальную точку.
  • (.*$) От буквальной точки до последнего символа сохраняются в group3.
  • $1$3 в заменяющей части печатаются только сохраненные группы1 и 3.

или

 (.*)(?:-[^.]*)(.*$)
 

Если вы используете это регулярное выражение, в заменяющей части вам нужно поставить только $1 и $2 .

ДЕМОНСТРАЦИЯ

Комментарии:

1. Поскольку захват является дорогостоящим, ваша вторая (игнорируемая) группа захвата была бы лучше в качестве группы без захвата, т. Е. (?:...)