我正在使用Javascript regEx来解析数据库字段以获取图像URL并将其格式化以进行输出-到目前为止,我一直在使用
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专用)。
感谢所有提供建议的人...
在OP用更多示例输入进行更新之后进行了更新。
您的尝试存在三个问题:比赛的边界,使用'。*'和缺少合法后缀的模式。
在RegEx中,点星符号是个坏主意,在文章“ Death to Dot Star! ”中可以很好地说明这一点。取而代之的是使用否定的字符类,在这里我选择了“ \ S *?”。这是“不是空格的任何字符”。如果您尝试将其替换为“。*?” 而是在regex101上,您可以看到它无法正确匹配(它包含不是图像的链接)。
由于它们都在同一字符串中,因此必须为匹配定义边界,并且由于空格足够,“ \ b”可以很好地解决问题。这也消除了对“(。*)”和“(\ w | $)”部分的需要。
您遗漏的最后一件事是url的合法结尾,并且有两种解决方案:定义您认为合理的内容以包含大多数情况并且没有误报,或者包含任何其他内容但有可能获得太多结果的可能性。
将所有内容包装在一起,您将得到以下两种不同的方法:
\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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句