Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式模式在第一次出现时不停止_Regex - Fatal编程技术网

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]);
    }
}