簡體   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