我正在使用Javascript regEx来解析图像网址的数据库字段并将其格式化为输出 - 到目前为止,我一直在使用
input = input.replace(/(https?:\/\/.*?\.(?:png|jpe?g|gif)(.*))(\w|$)/ig, "<br><img style='max-width:100%;overflow:hidden;' src='$1'>");
它一直很好。所有png,jpe?g和gif引用都被IMG标记取代,图像按预期显示在输出流中。
然而,我已被抛出一个循环。
我注意到一些网址(特别是那些来自Facebook CDN的网址 - 虽然我认为其他人也可以这样做)在图片类型之后添加了一大堆“东西”...如果不存在结果的东西在文件不可用的情况下,会生成缺少的图像图标。例如,这是来自fbcdn.net的有效图片网址:
https://scontent-lga1-1.xx.fbcdn.net/hphotos-xtf1/v/t1.0-9/11147160_10156300867440377_5455334309678688318_n.jpg?oh=916e68ac2c908bbe15961825c373d6bc&oe=5606B6F4
有人可以建议对regEx进行更改/改进以获取额外的尾随字符吗?或者是另一种必要的攻击方法
(我个人喜欢全局的regEx,因为我可以立即修复流中的所有实例...必须手动解析流不是我期待的......)
更新:我知道请求中存在一些含糊不清的内容 - 希望这会澄清。
我需要提取任何图片网址 - 无论图像延伸后的“内容”如何。它可能是文本字符串中的第一个项目,也可能是最后一个项目,或者嵌入在中间的某个位置。
处理在Javascript中完成。我目前正在使用它作为我的有效性测试。其中的所有图片都是从Google图片搜索中提取的有效网址。
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特有的解决方案。
感谢所有提供建议......
答案 0 :(得分:3)
使用更多示例输入更新OP后更新。
您的尝试有三个问题:匹配的界限,使用&#39;。*&#39;法律后缀的缺失模式。
点对点符号在RegEx中是一个坏主意,文章&#34; Death to Dot Star!&#34;很好地说明了。使用否定的字符类,在这里我选择&#34; \ S *?&#34;这是&#34;任何不空格&#34;的字符。如果您尝试用&#34;。*?&#34;而是在regex101上,您可以看到它无法正确匹配(它包含的链接不是图像)。
由于它全部在同一个字符串中,因此必须为匹配定义边界,因为空格足够了&#34; \ b&#34;诀窍很好。这也消除了对#34;(。*)&#34;和&#34;(\ w | $)&#34;部分。
你遗漏的最后一件事是网址的法律结局,并且有两种解决方案:要么定义你认为包含大多数情景并且没有误报的东西,要么包含任何有可能得到的东西结果太多了。
将所有这些包装在一起,您将有两种不同的方法:
\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
上试用