javascript正则表达式以字符串形式查找图像URL

javascript正则表达式以字符串形式查找图像URL,javascript,regex,Javascript,Regex,我正在使用Javascript正则表达式解析图像URL的数据库字段,并将其格式化以供输出——到目前为止,我一直在使用 input = input.replace(/(https?:\/\/.*?\.(?:png|jpe?g|gif)(.*))(\w|$)/ig, "<br><img style='max-width:100%;overflow:hidden;' src='$1'>"); 是否有人可以建议对正则表达式进行更改/改进,以提取额外的尾随字符?还是需要另一种攻击

我正在使用Javascript正则表达式解析图像URL的数据库字段,并将其格式化以供输出——到目前为止,我一直在使用

input = input.replace(/(https?:\/\/.*?\.(?:png|jpe?g|gif)(.*))(\w|$)/ig, "<br><img style='max-width:100%;overflow:hidden;' src='$1'>");
是否有人可以建议对正则表达式进行更改/改进,以提取额外的尾随字符?还是需要另一种攻击方法

(我个人喜欢全局正则表达式,因为我可以一次锁定流中的所有实例…必须手动解析流不是我所期望的…)

更新:我理解请求中存在一些模糊之处-希望这能澄清

我需要拉出任何图像url-不管图像扩展后的“东西”。它可以是文本串中的第一个项目,也可以是最后一个,或者嵌入在中间的某个地方。 处理是在Javascript中完成的。我目前正在使用它作为我的有效性测试。其中的所有图像都是从谷歌图像搜索中提取的有效URL

http://well-being.esdc.gc.ca/misme-iowb/auto/diagramme-chart/stg2/c_4_21_6_1_eng.png?20150508104424447 This is arbitrary text https://scontent-lga1-1.xx.fbcdn.net/hphotos-xtf1/v/t1.0-9/11147160_10156300867440377_5455334309678688318_n.jpg?oh=916e68ac2c908bbe15961825c373d6bc&oe=5606B6F4 this is arbitrary text

http://lh6.ggpht.com/-1Rua79J-EDo/TwuyZkHwcmI/AAAAAAAADvA/ENfg1TeayvU/type_catalog_error_thumb%25255B1%25255D.jpg?imgmax=800 this is arbitrary text http://image.slidesharecdn.com/top5thingstodoafteranaccident-140826163850-phpapp02/95/top-five-things-to-do-after-any-type-of-accident-causing-injury-1-638.jpg?cb=1409089267
希望这能为我可能遇到的变化类型提供足够的信息(我唯一确定的是FBCDN-我将其他的基于我在那里看到的其他知识…因此需要一个通用的解决方案,而不是FBCDN特有的解决方案)

感谢所有提供建议的人

在OP之后更新,使用更多示例输入进行更新

您的尝试有三个问题:匹配的边界、使用“.*”和缺少合法后缀的模式

点星表示法在正则表达式中是个坏主意,文章“”对此进行了很好的说明。改为使用否定字符类,这里我选择了“\S*?”,它是“任何不是空白的字符”。如果您尝试将其替换为启用的“*?”,您会看到它无法正确匹配(它包含一个非图像的链接)

因为它都在同一个字符串中,所以必须为匹配定义边界,而且因为空格足够了,“\b”很好地完成了这个任务。这也消除了对“(.*)”和“(\w |$)”部分的需要

你错过的最后一件事是url的合法结尾,对此有两种解决方案:要么定义你认为可能包含大多数场景且没有误报的内容,要么包含任何内容但有可能获得太多结果

将其全部包装在一起,就剩下这两种不同的方法:

解决方案1-定义什么是正确的 试穿一下

解决方案2-使用空白作为唯一因素

上尝试一下,为了抓住可选的问号和其他问题,您可以使用
(\?blabla)?
,但是键入这个听起来太简单了。有什么问题吗?@MrLister-是的,问题是我盯着它看得太久了,在regexpal.com上的测试毫无进展。。我尝试的所有变体要么太贪婪,要么不够贪婪。FB URL有一些一致性,但我确信我应该限制自己这样做。我还看到一些(示例不可用,抱歉)附加了大小信息,还有一些似乎附加了时间戳(用于缓存?)的人知道其他人放置了什么邪恶的混合物。您的regex101链接已损坏这就是我所想的;)@约翰尼斯科达尔-我已经准备好把这个标记为答案。。。但后来我发现它只与FB url匹配。。。更简单的东西,如
http://example.com/blah.jpg?fred
正如我在上面对李斯特先生所说的那样失败了-我不能确定其他人在那里做了什么坏事。@ScottBrown:这就是为什么我要求你为我们提供更好的示例输入。似乎您只向我们显示了您在解析时遇到困难的输入部分。如果不知道输入中还有什么,就不可能编写正确的正则表达式。例如,从您提供的样本来看,“.*”是正确的。@JohnySkovdal-谢谢您的建议。我更新了一个更好的示例,它显示了更多的位置和内容。我不能保证没有其他种类的url可能会遇到。我已经完成了您的regex101测试,不幸的是,该测试显示它太贪婪了,并且包含环绕URL的任意文本(这就是我自己的尝试遇到的问题)。
http://well-being.esdc.gc.ca/misme-iowb/auto/diagramme-chart/stg2/c_4_21_6_1_eng.png?20150508104424447 This is arbitrary text https://scontent-lga1-1.xx.fbcdn.net/hphotos-xtf1/v/t1.0-9/11147160_10156300867440377_5455334309678688318_n.jpg?oh=916e68ac2c908bbe15961825c373d6bc&oe=5606B6F4 this is arbitrary text

http://lh6.ggpht.com/-1Rua79J-EDo/TwuyZkHwcmI/AAAAAAAADvA/ENfg1TeayvU/type_catalog_error_thumb%25255B1%25255D.jpg?imgmax=800 this is arbitrary text http://image.slidesharecdn.com/top5thingstodoafteranaccident-140826163850-phpapp02/95/top-five-things-to-do-after-any-type-of-accident-causing-injury-1-638.jpg?cb=1409089267
\b(https?:\/\/\S*?\.(?:png|jpe?g|gif)
  # allowed postfixes to the filetype
  (?:\?(?:
    # alphnumeric key/value pairs
    (?:(?:[\w_-]+=[\w_-]+)(?:&[\w_-]+=[\w_-]+)*)|
    # alphnumeric postfix
    (?:[\w_-]+)
  ))?
)\b
\b(https?:\/\/\S+(?:png|jpe?g|gif)\S*)\b