我需要从HTML中提取所有图像,而不仅仅是从<img>
标记,而是从任何地方,包括相对路径。我试过这个正则表达式:
([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))
..但遇到特殊字符时失败了。例如in this case。
如何抓取路径,使其从'
(单引号),"
(双引号)或/
开始,中间没有空格,以图像扩展名结尾jpg|jpeg|png|gif
?
编辑:我尽可能使用DOM解析器,但我必须在这里使用regex从到处提取路径,包括内联CSS和JS。
答案 0 :(得分:2)
您可以使用lookbehind:
(?<=['"])[^'"\s]*\.(jpg|jpeg|png|gif)
解析任何不包含引号或空格的URL,并以引号开头。
使用lookbehind而不是匹配引号的(次要)优点是,这样,您可以直接使用整个匹配,而不必在后处理中去除引号。由于复杂性原因,所有正则表达式库都不支持Lookbehind,但是,在这种情况下,它并不比替代方案慢。
答案 1 :(得分:1)
这适用于您的测试数据:
['"\/]([^\s'"]+?\.(jpg|jpeg|png|gif))
首先需要单引号,双引号或正斜杠,然后捕获除空格,单引号和双引号之外的所有内容,直到最近的图像扩展名。匹配项存储在您的第一个捕获组中(通常为$1
)。
这种解决方案具有不需要外观的优点(或可能是不利的)。