Извлечение URL с и без пользовательских схем URL из текста, используя RegEx - PullRequest
0 голосов
/ 31 мая 2019

Я ищу способ извлечения URL-адресов из текста с помощью RegEx.Здесь есть много вопросов и очень хороших ответов, но я не нашел решения RegEx, способного извлекать URL-адреса с помощью пользовательских схем.

Вот несколько примеров, где мне нужны URL-адреса, извлеченные из:

Text: Send me a message on whatsapp whatsapp://send?text=Hello+World. I will get in touch!
-> Should extract whatsapp://send?text=Hello+World

Text: Some text google.com
-> Should extract google.com

Text: There are many nice people on https://www.stackoverflow.com
-> Should extract https://www.stackoverflow.com

Text: You can send visit my Facebook profile on fb://myhappyprofile. 
-> Should extract fb://myhappyprofile

Text: https://www.google.com
-> Should extract https://www.google.com

Решения, которые я нашел, явно извлекли URL-адреса, начиная с http:// https:// или : // .В этих решениях протоколы должны были быть указаны в выражении.

Выражение, из которого я получил больше всего результатов, является следующим выражением:

(http|ftp|https|whatsapp|fb):\/\/([\w_-]+(?:(?:\.[\w_-]+)?))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?

Live Demo

Здесь я перечисляю схемы URL («глубокие ссылки») для таких приложений, как WhatsApp и Facebook.К сожалению, это не очень хорошо масштабируется.

Любая помощь по этому вопросу будет принята с благодарностью!

1 Ответ

2 голосов
/ 31 мая 2019

Если я правильно читаю, вам нужен общий способ определения протокола, используемого для URL, чтобы вам не приходилось вести список из 100 различных?

Если это так, то замена списка протоколов стандартным захватом символов должна сделать эту работу.

Предполагая, что:

  • URL всегда будут содержать ": //" для отделения протокола от местоположения
  • протокол будет содержать не менее 2 символов и не более 20 (хотя вы можете настроить его в соответствии со своими требованиями

Это будет означать, что следующее должно делать работу

([a-zA-Z]{2,20}):\/\/([\w_-]+(?:(?:\.[\w_-]+)?))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?

https://regex101.com/r/epzXQv/2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...