我有以下正则表达式。
/<img.+src=['"](?P<src>.+?)['"].*>/i
但是当我在任何包含多个图像的字符串上运行它时,它将返回最后一个图像。事实上,无论是否是图像,它都会返回最后一次src发生。
这是因为它从<img
选择到最后一个下一个换行符,而不是停留在标记的最后>
。
如何更改我的正则表达式以停留在>
标记的<img>
看一下这个例子
答案 0 :(得分:3)
将.*
更改为.*?
,将.+
更改为.+?
.*
greedy ,与很多匹配.*?
不情愿,其匹配为 little 同样适用于+
版本。
答案 1 :(得分:0)
完全回答你的最后一个问题
如何更改我的正则表达式以停止在&gt;标签
您可能只需将.+
变为[^>]+
:
/<img[^>]+src=['"](?P<src>.+?)['"].*>/i
但它不是一个非常好的解决方案,因为它会使正则表达式引擎运行起来。
更好的解决方案是分两步完成,首先选择整个<img>
元素,然后在里面查找src
。
因此,如果您想在src
中显示每个string
:
var images = string.match(/<img[^>]+>/ig);
for (img of images) {
var match = img.match(/src=(["|'])([^'"]*)\1/);
if (match) { // (avoid error when <img> doesn't contain src)
console.log(match[2]);
}
}
请注意我们如何查找src="..."
或src='...'
,按(["|'])
捕获开头报价,然后使用反向引用确保结束报价相同。