2017-03-17 67 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)$