为什么此RegEx与此变量不匹配?

时间:2016-06-24 18:50:16

标签: javascript regex

Noob在这里提问,基本上我想做的是从一系列html copypastes中捕获一个url

   var images = document.querySelectorAll('div.uiScaledImageContainer img')
   imageSelector = /(?:http.*(?="))/

   for (var i = 0; i < images.length; i++) {
console.log((imageSelector.exec(images))[i]);
}

我不知道这是否是实现此任务的最佳方法,我已经学习了如何编写不到一个月的代码,这就是我想出的方法。到目前为止已经学到了。

当我将数组粘贴到RegEx检查器中时,RegEx匹配url;然而,当我手动将var和RegEx输入到控制台时,它会在.test时返回false,而在.exec时显然为null。 我离开这里时,不知道自己做错了什么。

>images
[
<img class="scaledImageFitHeight img" src="https://scontent-dfw1-1.xx.fbcdn.net/v/t1.0-0/p160x160/12734050_927062960744742_7453187646865179877_n.jpg?oh=8be38f653466ef122bab606b11f6a87c&amp;oe=57ED6259" style="left:-85px;" alt="Te Queremos Escuchar's photo." width="423" height="157">
,
<img class="scaledImageFitHeight img" src="https://scontent-dfw1-1.xx.fbcdn.net/v/t1.0-0/p296x100/13442267_1033303953373035_4117048021887988380_n.jpg?oh=ec9b7dd3f8daabc26d66d32d393437a8&amp;oe=57F1715B" style="left:0px;" alt="Academia de Cultura Asiática Ninshi's photo." width="296" height="394">
,
]
>imageSelector
 /(?:html.*?(?=")/
>imageSelector.test(images)
false

1 个答案:

答案 0 :(得分:0)

您在imagesimageSelector.exec(images))上进行了测试,但您希望在images[i]上进行测试。

除此之外imagesNode个元素的列表,而Node不是字符串。

如果将非字符串对象传递给exec,则它将转换为字符串。如果对象具有toString方法,则将使用此方法。因此,如果您执行imageSelector.exec(images[i]),那么它将等于imageSelector.exec(images[i].toString())。图片上的toString会产生类似[object HTMLImageElement]的内容。

如果您想在图片的整个html上应用RegExp,那么您需要使用outerHTMLimageSelector.exec(images[i].outerHTML)

但要获取图片的src,您应该使用images[i].getAttribute('src')MDN: getAttribute