2017-03-17 61 views
-2

我需要排除輸入字符串中的所有鏈接,但允許圖像鏈接。正則表達式匹配圖像鏈接,但排除正常的網址?

https://www.example.com/X00132BhJk.jpg =>允許

http://www.example.com/search?ident=X00132BhJk =>不允許

所以,假定輸入字符串等

<p>http://example.com/abc.jpg</p><img src='http://example.com/abc.jpg'/>http://example.com/222.jpg http://example.com/xyz.aspx <a url='http://example.com/abc'/> 

應當僅允許在P含量,IMG標籤,從文本標籤其他的並且鏈接應該通過測試。

我怎樣才能實現與正則表達式這個結果,我不擅長的正則表達式在所有!

From http://regexr.com/  

/(https?:\/\/.*\.(?:png|jpg))/i 
    => looks like matches image link, still need a way to exclude normal link without .png, jpg, gif... 

UPDATE:

我使用jQuery解析HTML成HTML標籤,並測試每個節點的HTML內容。

var str ="<p>http://example.com/abc.jpg</p><img src='http://example.com/abc.jpg'/> http://example.com/xyz.aspx?id=2 <a url='http://example.com/jpg/3'/><div id='abcd'>http://example.com/xyz.aspx?jpg=2 <br/> http: // example.com/xyz.aspx?jpg=2</div>http://example.com/xyz.aspx?jpg=20 ", 
 
html = $.parseHTML(str),$log = $("#log"); 
 
var regex = /^http[^ \[email protected]\$\^&\(\)\+\=]+(\.png|\.jpeg|\.gif|\.jpg)$/; 
 
    
 

 

 
$.each(html, function(i,el) {  
 
var src=''; 
 
switch(el.nodeName) 
 
{ 
 
    case 'IMG': 
 
    src = el.src;break; 
 
    case '#text': src= el.textContent;break; 
 
    default: src=el.innerHTML; 
 
} 
 
      console.log(el.nodeName + ' - ' + src + ' - ' + regex.test(src)); 
 
      
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>

+0

這是不可能告訴我們,如果從URL本身的URL引用圖像內容 - 您只能從網址返回的mimetype和內容中確定。你需要一個更好的問題陳述。 – symcbean

回答

1

你可以試試下面的正則表達式:

^http.+(png|jpeg|gif|jpg)$ 

這會期望字符串開始http和結束與任何指定的格式之一

var regex = /^http[^ \[email protected]\$\^&\(\)\+\=]+(\.png|\.jpeg|\.gif|\.jpg)$/; 
 

 
var test = [ 
 
    "https://www.example.com/X00132BhJk.jpg", 
 
    "http://www.example.com/search?ident=X00132BhJk" , 
 
    "http:// example.com", 
 
    "http:// sample.png", 
 
    "http://test.com/png" 
 
] 
 

 
for (var i = 0; i< test.length; i++){ 
 
    console.log(regex.test(test[i]), test[i]) 
 
}

+0

謝謝,我想我會提高這一點,因爲有時候,人們試圖欺騙系統只是鍵入空白http://示例。com,並不是真正的錨鏈接。 –

+0

在這種情況下,您可以嘗試'[^ @ ^&* \(\)\ +] +'而不是'。+' – Rajesh

+0

@namvo您可以嘗試更新。希望能幫助到你。 :-) – Rajesh

0

兩個注意事項:

  1. 這將不檢查整個字符串,以確保它是一個有效的網址,網上有大量其他資源用於驗證網址
  2. 不可能確保該鏈接實際上指向一個圖像,這是唯一可能的實際發送請求到該URL,並查看哪種資源返回

允許這兩個注意事項,你是非常接近。你需要的一切都放在一個^開始和一個$在字符串的結尾,以確保jpgpng是字符串中的最後一個字符。我也把一個可選的e爲jpg,你可以添加所有其他圖像文件的擴展名,如gifbmp等:

^https?:\/\/.+\.(?:png|jpe?g)$