使用RegEx

时间:2019-05-31 08:29:41

标签: regex url deep-linking url-scheme

我正在寻找一种使用RegEx从文本中提取URL的方法。关于SF,这里有很多问题和很好的答案,但是我没有找到能够提取自定义方案的URL的RegEx解决方案。

以下是一些我需要从中提取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

到目前为止,我发现的解决方案明确提取了以 http:// https:// :// 开头的URL。在这些解决方案中,必须在表达式中指定协议。

我得到最多结果的表达式是以下表达式:

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

Live Demo

在这里,我列出了诸如WhatsApp和Facebook之类的应用程序的URL方案(“深层链接”)。 不幸的是,这不能很好地扩展。

对此将提供任何帮助!

1 个答案:

答案 0 :(得分:2)

如果我没看错的话,那么您想要的是一种通用的方法来检测URL使用的协议,这样您就无需维护100个不同协议的列表?

如果是这样,那么用标准字符捕获替换协议列表就可以了。

假设:

  • URL始终包含“://”以将协议与位置分开
  • 协议最少2个字符,最多20个字符(不过您可以根据自己的需要进行调整

这意味着以下人员应该做

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

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