Regex 正则表达式模式在第一次出现时不停止
我有下面的正则表达式Regex 正则表达式模式在第一次出现时不停止,regex,Regex,我有下面的正则表达式 /.+?)['“].*>/i 但是,当我在任何包含多个图像的字符串上运行此操作时,它将返回最后一个图像。事实上,无论它是否为图像,它都将返回最后一个src实例 这是因为它是从标签的中选择的 如何将正则表达式更改为在标记的处停止 看看这个例子 将*更改为*?,将+更改为+? *是贪婪的,它尽可能匹配 *?不情愿,这与尽可能少的匹配 +版本也是如此。准确回答您的最后一个问题 如何将正则表达式更改为在标记的>处停止 您只需将+转换为[^>]+: /<img[^>]
/.+?)['“].*>/i
但是,当我在任何包含多个图像的字符串上运行此操作时,它将返回最后一个图像。事实上,无论它是否为图像,它都将返回最后一个src实例
这是因为它是从标签的
中选择的
如何将正则表达式更改为在
标记的
处停止
看看这个例子
将
*
更改为*?
,将+
更改为+?
是贪婪的,它尽可能匹配*
不情愿,这与尽可能少的匹配*?
+
版本也是如此。准确回答您的最后一个问题
如何将正则表达式更改为在标记的>处停止
您只需将+
转换为[^>]+
:
/<img[^>]+src=['"](?P<src>.+?)['"].*>/i
请注意,我们如何查找
src=“…”
或src=“…”
,通过([“|])
捕获开始引用,然后使用反向引用确保结束引用是相同的。@mparnisari:请注意,您链接的主题的公认答案是错误的(这就是我否决它的原因),特别是对于高级正则表达式引擎。还有其他一些主题解释了解析HTML的直接字符串方法的替代方法。请尝试+?)['“].*>
@dawg,这很管用!谢谢你me@ChrisJamesChampeau刚刚注意到您有另一个bug。请参阅更新。
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]);
}
}