2009-06-20 2 views
2

Не уверен, если я делаю это право:Регулярное выражение соответствия либо один специальный символ или конкретную последовательность

/(https?:\/\/\S+)(\s|(& nbsp;))?/g; 

Это должно соответствовать URL, начинающиеся с HTTP (S): // и заканчивая пробельный символ или & nbsp;

Так что проблема эта часть:

(\s|(& nbsp;))? 

Это должно означать: соответствовать либо пробел или & NBSP; но это не сработает. Он никогда не подходит для & nbsp; и просто продолжается до тех пор, пока не найдет пробел.

Я не ищу другого http regexp, я не ищу решение для библиотеки javascript, я доволен этим, я просто хочу выяснить, что это последняя часть.

Редактировать: какая-то ошибка в форматировании кода на этом сайте, между & и nbsp; но этот сайт превращает его в пространство, если я избавлюсь от этого разделительного пространства.

+0

Пытался получить форматирование правильно с помощью & NBSP ;. Проблема в том, что   является допустимым кодом HTML для неразрывного пространства, а уценка позволяет вставлять HTML. – workmad3

+0

@ workmad3: & nbsp; делает трюк в обычном тексте. Амперсанд с последующим "nbsp;" в backticks отобразит желаемую последовательность, но я не мог понять, как это сделать в предварительно отформатированном блоке. –

ответ

6

\S+ немного жадный, и будет соответствовать как много символов без пробелов, насколько это возможно, в том числе любой  , которые могли бы быть там. Измените его на это ungreedy эквивалент \S+?, и вы, вероятно, лучше удачи: (. Обновлено потому я проглядел заднюю ?)

/(https?:\/\/\S+?)(\s| |$)/g;

+0

Нет, что теперь соответствует только первому символу без слова. –

+0

Я имею в виду не-пробельный символ, поэтому он перехватывает http: // w, а не http: /www.cnn.com например –

+0

@apphacker, хорошо, это имело смысл. Я упустил вопросительный знак. Я полагаю, вы разместили его там, потому что вы случайно хотите сопоставить эти URL-адреса в конце строки? Самый простой способ - совместить либо whitspace, либо & nbsp;, либо конец строки. – molf

Смежные вопросы