Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярка, удалить www из адреса (https://javascript.ru/forum/misc/26905-regulyarka-udalit-www-iz-adresa.html)

Magneto 27.03.2012 03:15

Регулярка, удалить www из адреса
 
Из веб-адресов нужно удалить www которые иногда идут впереди, при этом не сломать сам адрес, тоесть:

www.site.com -> site.com
www.sitewww.com -> sitewww.com
www.ru - > www.ru
org.ua -> org.ua

у меня не выходит.

with-love-from-siberia 27.03.2012 04:10

/www\.(?=\w+(\.\w+)+$)/

и далее изменять или увеличивать сложность по мере необходимости учета всех возможных вариантов.

trikadin 27.03.2012 08:44

Magneto, рискну предложить свой вариант (хоть и не ручаюсь за него после бессонной ночи). По сути, www идёт либо в самом начале (если протокол не указан), либо после двух слешей. Чтобы не сломать адрес, который идёт потом, надо задуматься о количестве точек до пути на сервере (от которого host-имя отделено слешем). Если там только одна точка, то www - это название сайта, если больше - это ненужный нам архаизм.

function replace_www(str) {
 return str.replace(/(?:((?:\/\/)|^)www\.)(?=[^/]*?\.)/i, "$1");
}
alert(replace_www("www.site.com"));
alert(replace_www("www.sitewww.com"))
alert(replace_www("www.ru"));
alert(replace_www("http://yandex.ru"));


Если же вам (вероятнее всего :D) нужна замена в строке всех ссылок, то как-то так:

function replace_www(str) {
 return str.replace(/(?:((?:(?:\/\/)|^)|\s)www\.)(?=[^/\s$]*?\.)/gi, "$1");
};
str= "www.org.ua, www.ru, www.ru/savva.ss, www.sitewww.ru, http://www.yandex.ru";
alert(replace_www(str));


Мой вариант не идеален, но что-то он может...

monolithed 27.03.2012 11:03

А это уже на катит?

var url = window.location;
url.host + url.pathname;

trikadin 27.03.2012 11:05

monolithed, мм... А причём тут это?

monolithed 27.03.2012 13:25

Цитата:

Сообщение от trikadin
мм... А причём тут это?

Ну как, если Magneto получает адрес из Location, то это самый верный вариант, если же строку, то тогда мимо.

with-love-from-siberia 27.03.2012 14:07

monolithed,
Как твое предложение в целом, вне зависимости от источника строки, помогает в решении проблемы - удалить ведущий префикс в www.example.com, но оставить в www.ru?

trikadin 27.03.2012 15:15

Цитата:

Сообщение от monolithed
Ну как, если Magneto получает адрес из Location, то это самый верный вариант, если же строку, то тогда мимо.

Да, я понимаю. Просто ему, судя по посту, нужно удалять это из многих разных ссылок... Поэтому регулярки.

nerv_ 27.03.2012 15:56

Сразу не заметил www.ru :)
var re = /^w{3}\.(?=[^.]+\.)/;

alert( 'www.site.com'.replace( re, '' ) );		// site.com
alert( 'www.sitewww.com'.replace( re, '' ) );	// sitewww.com
alert( 'www.ru'.replace( re, '' ) );			// [url]www.ru[/url]
alert( 'org.ua'.replace( re, '' ) );			// org.ua

Magneto 27.03.2012 16:52

Цитата:

Сообщение от monolithed
Ну как, если Magneto получает адрес из Location, то это самый верный вариант, если же строку, то тогда мимо.

Я получаю адрес как строку.

Теперь, пожалуйста, помогите распарсить html-страницу.
Имеется обычная html-страница, я ее получаю через ajax. В этой странице между тегами <title></title> находится нужное мне число, нужно вытащить это число. Пример страницы:
<!-- Здесь начало страницы-->

<title>
(url:www.rambler.ru/* | url:rambler.ru /* | url:rambler.ru | url:www.rambler.ru) -
Яндекс:
нашёлся 1231&nbsp;ответ
</title>

<!-- И дальше конец страницы -->


Нужное число в данном примере 1231, число может быть от 0 и до бесконечности.


Часовой пояс GMT +3, время: 03:11.