Javascript регулярное выражение, чтобы найти базовый URL - PullRequest
1 голос
/ 15 ноября 2010

Я схожу с ума от этого регулярного выражения в JS:

var patt1=/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*?(:[0-9]+)?(\/)?$/i;

Если я введу строку ввода типа "http://www.eitb.com/servicios/concursos/516522/"", это регулярное выражение будет возвращено NULL, поскольку после базового URL есть "папка". Она работает в PHP, но не в Javascript, как в этом сценарии:

<script type="text/javascript">
var str="http://www.eitb.com/servicios/concursos/516522/"; 
var patt1=/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*?(:[0-9]+)?(\/)?$/i;
document.write(str.match(patt1));
</script>

Возвращает

http://www.eitb.com/servicios/concursos/516522/,,/516522,,/ 

Вопрос: почему он не работает? Как заставить это работать?

Идея состоит в том, чтобы реализовать это регулярное выражение в другой функции для получения значения NULL, если переданный URL-адрес имеет неправильный формат:

http://www.eitb.com/ -> Правильно http://www.eitb.com/something -> Неверно

Спасибо

Ответы [ 2 ]

8 голосов
/ 26 октября 2013

Учитывая, что у вас правильно отформатированный URL-адрес, этот простой RegExp должен выполнять свои действия каждый раз.

var patt1=/^https?:\/\/[^\/]+/i;

Вот разбивка ...

Начиная с первой позиции (обозначается ^ )

Ищите http

http может сопровождаться s (обозначается ? , что означает 0 или 1 символа или задается перед ним)

Затем найдите : // после http или https (обозначается : \ / \ / )

Далее соответствует любое количество символов, кроме / (обозначается [^ \ /] + - + означает 1 или более)

Без учета регистра (обозначается i )

ПРИМЕЧАНИЕ: это также подберет порты http://example.com:80 - чтобы избавиться от : 80 (или двоеточие, за которым следует номер порта), просто добавьте : к классу отрицанных символов [^ \ /:] например.

7 голосов
/ 15 ноября 2010

Я не профессионал по javascript, но привык к регулярному выражению perl, поэтому я попробую; . в середине регулярного выражения, возможно, потребуется экранировать, так как он может отобразить / и сглаживать все регулярное выражение.

Попробуйте так:

var patt1=/^http(s)?:\/\/[a-z0-9-]+(\.[a-z0-9-]+)*?(:[0-9]+)?(\/)?$/i; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...