У кого-нибудь есть предложения по обнаружению URL в наборе строк?
arrayOfStrings.forEach(function(string){
// detect URLs in strings and do something swell,
// like creating elements with links.
});
Обновление: я использовал это регулярное выражение для обнаружения ссылок ... Видимо, через несколько лет.
kLINK_DETECTION_REGEX = /(([a-z]+:\/\/)?(([a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|local|internal))(:[0-9]{1,5})?(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-zA-Z0-9!$&'()*+.=-_~:@/?]*)?)(\s+|$)/gi
Полный помощник (с дополнительной поддержкой Handlebars) находится в # 1654670 .
javascript
regex
url
arbales
источник
источник
Ответы:
Сначала вам нужно хорошее регулярное выражение, соответствующее URL. Это сложно сделать. Смотрите здесь , здесь и здесь :
В любом случае, этот ответ предназначен не для того, чтобы дать вам лучшее регулярное выражение, а скорее как доказательство того, как выполнять перенос строк внутри текста с помощью JavaScript.
ОК, так что давайте просто использовать это:
/(https?:\/\/[^\s]+)/g
Опять же, это плохое регулярное выражение . У него будет много ложных срабатываний. Однако этого достаточно для этого примера.
Итак, в сумме попробуйте:
источник
.replace
: |text="Find me at http://www.example.com, and also at http://stackoverflow.com."
результатами пунктуации в двух 404-х годах. Некоторые пользователи знают об этом и добавляют пробел после URL перед пунктуацией, чтобы избежать поломки, но большинство используемых мной компоновщиков (Gmail, etherpad, phabricator) отделяют конечную пунктуацию от URL.Вот что я использовал в качестве своего регулярного выражения:
Это не включает конечную пунктуацию в URL. Функция полумесяца работает как шарм :) так:
источник
urlRegex
следует определять снаружи, такlinkify
как его компиляция стоит дорого.()
в каждый список символов, и теперь это работает.Я довольно долго гуглял эту проблему, потом мне пришло в голову, что есть метод Android, android.text.util.Linkify, который использует некоторые довольно надежные регулярные выражения для достижения этой цели. К счастью, Android с открытым исходным кодом.
Они используют несколько разных шаблонов для сопоставления разных типов URL. Вы можете найти их все здесь: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.0_r1/android/text/util/Regex.java#Regex. 0WEB_URL_PATTERN
Если вас интересуют только те URL, которые соответствуют WEB_URL_PATTERN, то есть URL, соответствующие спецификации RFC 1738, вы можете использовать это:
Вот полный текст источника:
Если вы хотите быть по-настоящему модным, вы также можете проверить адреса электронной почты. Регулярное выражение для адресов электронной почты:
PS: домены верхнего уровня, поддерживаемые вышеприведенным регулярным выражением, действуют по состоянию на июнь 2007 года. Для получения актуального списка вам необходимо проверить https://data.iana.org/TLD/tlds-alpha-by-domain.txt. ,
источник
a-zA-Z
иhttp|https|Http|Https|rtsp|Rtsp
.Основано на ответе Crescent Fresh
если вы хотите обнаружить ссылки с http: // ИЛИ без http: // и с помощью www. Вы можете использовать следующее
источник
Эта библиотека в NPM выглядит довольно полной https://www.npmjs.com/package/linkifyjs
источник
Функция может быть улучшена для визуализации изображений:
или для уменьшенного изображения, которое ссылается на изображение полного размера:
А вот функция strip (), которая предварительно обрабатывает текстовую строку для единообразия, удаляя любой существующий html.
источник
Короткий код Большая работа! ...
Результат: -
источник
Существует пакет npm: url-regex , просто установите его с помощью
yarn add url-regex
илиnpm install url-regex
и используйте следующее:источник
tmp.innerText не определен. Вы должны использовать tmp.innerHTML
источник
попробуй это:
также признают URLs , такие как
google.com
,http://www.google.bla
,http://google.bla
,www.google.bla
но неgoogle.bla
источник
Вы можете использовать это регулярное выражение для извлечения нормальных шаблонов URL.
Если вам нужны более сложные шаблоны, используйте такую библиотеку.
https://www.npmjs.com/package/pattern-dreamer
источник
(?:www\.|(?!www))
? Почему долженwwwww.com
быть недействительным?Универсальное объектно-ориентированное решение
Для таких людей, как я, которые используют такие фреймворки, как angular, которые не позволяют напрямую манипулировать DOM, я создал функцию, которая принимает строку и возвращает массив объектов
url
/,plainText
которые можно использовать для создания любого представления пользовательского интерфейса, которое вы хотите.URL регулярное выражение
Для сопоставления URL я использовал (слегка адаптированный)
h0mayun
регулярное выражение:/(?:(?:https?:\/\/)|(?:www\.))[^\s]+/g
Моя функция также удаляет знаки препинания в конце URL-адреса, например,
.
и,
я считаю, что это будет скорее пунктуация, чем законное окончание URL-адреса (но это может быть! Это не точная наука, как хорошо объясняют другие ответы). Для этого я применяю следующее регулярное выражение на соответствующих URL/^(.+?)([.,?!'"]*)$/
.Машинописный код
источник
Если вы хотите обнаружить ссылки с http: // ИЛИ без http: // ИЛИ ftp ИЛИ с другими возможными случаями, такими как удаление конечной пунктуации в конце, взгляните на этот код.
https://jsfiddle.net/AndrewKang/xtfjn8g3/
Простой способ использовать это - использовать NPM
источник