繁体   English   中英

正则表达式(JS):匹配没有协议的URL,忽略带有一个协议的URL

[英]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.comwww.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM