2017-06-21 26 views
1

我用下面拿起所有HTTPS或從一個大的字符串中的FTP正則表達式 -

/(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim; 

我想擴展功能,以免拿起任何URL的有符合某些網址前src="標籤

比賽: https://xxx.yyy.com

不匹配: src="https://xxx.yyy.com

我已經嘗試過試圖匹配src="但沒有成功的負面看法。

+0

你爲什麼不告訴我們你在使用負回顧後嘗試? – Amy

+0

問題是Javascript不支持lookbehindes。 –

回答

1

JavaScript正則表達式不支持 lookbehinds。你能匹配這樣的字符串

的常用方法是:

[^"]https:\/\/[a-z.]+ 

雖然你應該寫的更詳細的正則表達式的域,然後直接跳過第一個字符來獲得URL。你可以在這裏看到regex demo

+0

沒有匹配,沒有開始'「' – vaso123

+0

你是對的,謝謝。我編輯了我的答案。 –

+0

幾乎完美的是,唯一不匹配的url是url是輸入的第一個字符;) – Esteban

0

JavaScript中不支持Lookbehinds。然而,你可以通過一個可選的組明確匹配src="解決這個問題,然後篩選出與該組匹配的所有比賽:

var input = `Match: https://match.xxx.yyy.com 
 
    No Match: src="https://fail.xxx.yyy.com`; 
 
var regex = /(src=")?\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/gim; 
 
var urls = []; 
 

 
// collect only matches without `src="` prefix 
 
input.replace(regex, function(match, src) { if (!src) {urls.push(match)} }); 
 

 
console.log(urls);