应为未返回的图像使用regex

regex for images not returning expected

本文关键字:regex 图像 返回      更新时间:2023-09-26

我使用以下正则表达式在提要中的标记中搜索图像:

var str=items.item(i).getElementsByTagName("content:encoded").item(0).text;
var patt1=/([a-z'-_0-9'/':'.]*'.(jpg|jpeg|png|gif))/i
var urlMatch = str.match(patt1);

然后,我将以下标签中的urlMatch[0]、urlMatch[1]和urlMatch[2]打印到控制台:

<![CDATA[
<p><a href="http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency.jpg"><img class="alignleft size-thumbnail wp-image-56646" alt="Emergency" src="http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency-150x150.jpg" width="150" height="150" /></a></p> <p><strong>The HSE has confi
]]>

这将分别返回以下3个结果:

http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency.jpg,
http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency.jpg, 
jpg.

有人能向我解释一下发生了什么事吗?为什么我没有得到名字里有150x150的那个?这是我需要的。感谢您提前提供的帮助

第一个匹配得到多个组,而不是多个匹配。也就是说,urlMatch[0]是匹配项,urlMatch[1]是第一个捕获组(第一组括号,顺便说一下,与整个匹配项相同),urlMatch[2]是模式中的第二组括号(您已经将其包裹在文件扩展名周围)。

您需要使用全局g标志:

var patt1=/([a-z'-_0-9'/':'.]*'.(jpg|jpeg|png|gif))/ig;
var urlMatch = str.match(patt1);

结果:

[
  "http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency.jpg",
  "http://www.highlandradio.com/wp-content/uploads/2013/08/Emergency-150x150.jpg"
]

如果确实需要捕获组(除了所有匹配之外),则必须使用RegExp.exec()

如果没有,可以使用非捕获组来提高性能。请注意,在任何情况下都不需要外括号,所以无论如何都可以省略。使用非捕获组,这看起来像:

var patt1 = /[a-z'-_0-9´'/:.]*'.(?:jpg|jpeg|png|gif)/ig;