创建一个JavaScript正则表达式,用于从URL中提取图像名称。

3

我希望你能帮我创建一个正则表达式,从url中提取图像名称。我已经尝试了几天来创建这个正则表达式,但是我无法让它工作。

情况: 我有一个使用phpThumb创建的图像url,看起来像这样: \bla\thumb\phpThumb.php?src=/bla/images/thisistheimage.jpg&fltr[]=wmt|40|B|FFFFFF|georgia.ttf|35&hash=b7412f04f09cd6b488435231651d61453

现在我需要提取以下内容:thisistheimage.jpg

一些事实:

  • 图像名称前面始终有“/”;
  • 图像名称后面始终跟着一个符号&
  • 图像扩展名也可以是:jpeg、JPG、png、PNG、gif;

我所能够抓取到的仅仅是图像扩展名:(?:png|jpg|gif)

请问您能否帮我找出在这种情况下应该使用什么正则表达式?

我能够在JavaScript或PHP中使用正则表达式,您建议在哪里使用?(我使用JavaScript提交表单,表单操作在PHP中完成。)


1
回复:“我能在JavaScript或PHP中使用正则表达式,你建议在哪里使用?”:请记住,您不能信任表单中提交的任何内容,因为它来自于您无法控制的代码。您可能编写了与PHP页面交互的JavaScript代码,但是您无法保证这就是用于提交表单的代码。因此,在没有其他原因的情况下,您几乎总是应该优先考虑在PHP中进行服务器端处理。 - ruakh
延续ruakh的评论:JavaScript应该用于用户方便,而不是任何形式的数据安全或清洁。在存储来自用户的任何东西之前,始终先在服务器端进行检查。 - David Thomas
2个回答

4
/\/([A-Z0-9_-]{1,}\.(?:png|jpg|gif|jpeg))/i

我认为这应该可行。i标志表示不区分大小写

  • 匹配斜杠 /
  • 字母数字、、- 一个或多个 [A-Z0-9-]{1,}
  • 句点 .
  • 扩展名 (?:png|jpg|gif|jpeg)

5
忽略前导斜线的匹配改进: /(?!\/)([A-Z0-9_-]{1,}\.(?:png|jpg|gif|jpeg))/i - Intelekshual
非常好用,非常感谢!你的解释帮助我现在理解了它是如何以及为什么工作的。@Intelekshual:同样感谢您与我们一起思考并发布改进! - user1732556

0

既然你已经标记了, 为什么不查看document.images并获取你想要的图像呢?

像这样:

// add a proxy to all images in the page

var proxy = 'https://proxytea.appspot.com/'

for (var x=0; x<document.images.length; x++) {
    imagem = document.images[x];
    imagem.src = imagem.src.replace(location.protocol + '//', proxy);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接