[英]Regex (JS): Match URLs without a protocal, ignore URLS that with one
为另一个正则表达式URL匹配问题表示歉意,但是我无法在其他任何线程中找到解决方案。
我想在一个字符串上运行一个replace()
方法,该模式可以匹配所有没有协议(URL,http,https等)的URL,但是忽略确实包含一个的URL。
因此,鉴于此输入:
www.google.com www.facebook.com http://www.google.com http://www.facebook.com
它与第一行的www.google.com
和www.facebook.com
匹配(没有任何空格),但忽略第二和第三行的其他URL。
我考虑过只寻找www
并忽略以//
作为前一个字符的匹配项,这导致我想到了这一点:
https://www.regex101.com/r/Y3rqxy/1
但是,您可以看到第二个匹配项包括前面的空格。 当我想用http://www
替换www
,此空格会使事情有些混乱。
任何正则表达式普通话能够帮助我解决这一问题吗?
发布此消息仅几秒钟后,我的一位同事提出了一个解决方案。 有点古怪(感谢javascript),但是可以用! 本示例假定您要向缺少其协议的所有URL添加http://
。
首先,您必须反转在以下位置运行.replace()
方法的字符串:
string.split('').reverse().join('')
然后,您可以使用以下正则表达式来运行replace方法(请注意向后的http://www
!):
string.replace(/www(?!\\/\\/)/gi, 'www//:ptth')
然后,您只需再次反转字符串即可:
string.split('').reverse().join('')
现在,任何在该字符串中缺少协议的URL都将拥有它们。
它不会赢得任何清洁奖,但是它有效!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.