Как найти URL в полном тексте с помощью регулярного выражения - PullRequest
1 голос
/ 17 августа 2010

Что не так со следующим регулярным выражением, которое работает во многих онлайн-тестировщиках регулярных выражений JavaScript (и в RegEx Buddy), но не работает в моем приложении?

Предназначен для замены URL гиперссылкой. Javascript находится в файле JavaScript.

var fixed = text.replace(/\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]/ig, "<a href='$&' target='blank'>$&</a>");

Например, Chrome жалуется на то, что & недопустимо (как и IE8). Есть ли способ избежать амперсанда (или что-то еще не так), не прибегая к объекту RegEx?

Ответы [ 2 ]

1 голос
/ 17 августа 2010

Эти тестеры позволяют вам вводить регулярное выражение в необработанном виде, но когда вы используете его в исходном коде, вы должны записать его в виде строкового литерала или (как в данном случае) литерала регулярного выражения.JavaScript использует прямые косые черты в качестве разделителей литералов регулярных выражений, поэтому вам нужно избегать любых косых черт в самом регулярном выражении, чтобы избежать путаницы в интерпретаторе.

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

Я узнаю это регулярное выражение, использовав его на днях;Вы получили это из библиотеки RegexBuddy, не так ли?Если бы вы использовали функцию «Использовать» в RB для создания JS-совместимого регулярного выражения, оно бы избежало косой черты.

0 голосов
/ 17 августа 2010

Это работает для меня в Chrome

var fixed = text.replace(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/igm, "<a href='$1' target='blank'>$1</a>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...