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

时间:2017-01-18 16:06:01

标签: javascript regex

对另一个正则表达式URL匹配问题表示道歉,但我无法在任何其他线程中找到解决方案。

我想在字符串上运行replace()方法,其模式匹配所有没有协议的网址(http,https等),但忽略了确实存在的网址。

所以给出了这个输入:

www.google.com www.facebook.com http://www.google.com http://www.facebook.com

它会在第一行匹配www.google.comwww.facebook.com(没有任何周围的空格),但忽略第二行和第三行的其他网址。

我想过只是寻找www而忽略了//作为前面字符的匹配,这让我想到了这个:

https://www.regex101.com/r/Y3rqxy/1

但是,正如您所看到的,第二个匹配包括前面的空格。由于我想将www替换为http://www,因此这个空白会让人感觉不安。

任何正则表达的官员都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

发布此消息后几秒钟,我的一位同事想出了一个解决方案。它有点古怪(感谢javascript)但它的确有效!此示例假定您要将http://添加到任何缺少其协议的网址。

首先,您必须撤消您在.replace()方法上运行{1}}方法的字符串:

string.split('').reverse().join('')

然后你可以使用以下正则表达式调用replace方法(注意向后http://www!):

string.replace(/www(?!\/\/)/gi, 'www//:ptth')

然后你再次反转你的字符串:

string.split('').reverse().join('')

任何缺少该字符串中的协议的URL现在都会拥有它们。

它不会因清洁而获得任何奖项,但它确实有效!