从标签中提取URL

我正在寻找parsing通过包含元素的HTML请求:

<img src="https://pbs.twimg.com/media/...." alt="Embedded image permalink"</a> 

尝试获取img src标签。 我想要的只是url。

在这一点上,我可能会过度。 使用Request和Cheerio尝试完成此操作。

我尝试过的20种不同的方式是我现在的代码。

 var dummy; request('http://t.co/....', function (error, response, body) { if (!error && response.statusCode == 200) { $ = cheerio.load(response.body); dummy = $('img[alt=Embedded image permalink]').attr('html'); console.dir(dummy); } } 

我收到错误消息:

 selector = selector.substr(data[0].length); TypeError: Cannot read property '0' of null 

正如我所说的,可能过于复杂。 什么是最简单的(或只是function)的方式来做到这一点?

使用正则expression式!

像这样的事情应该做的伎俩:

 html.match(/<img [^>]*src="([^"]*)"/g) 

看到这里的工作示例: http ://www.rubular.com/r/f89Y9fHGtN(小心:Ruby正则expression式有点不同于JS的,但我不知道这样一个很酷的工具)。


Regexp解释说:

<img – 符合标签的开头。

[^>]* – 有点棘手。 这摆脱了src参数前面的东西(例如, alt参数)。 这个版本在一个参数里面有一个> char的时候会失败,这可能不会发生。 你可以尝试用.*replace这个部分,在这种情况下工作,另一方面,当参数值以src=结尾时失败。

src=" – 这find了src参数。

([^"]*)捕获里面的URL。

" – find值的结尾。

有些人在遇到问题时,会想:“我知道,我会用正则expression式”。 现在他们有两个问题。

所以,如果我理解正确的话,你想立即减去string中的srcstring中的string?

你为什么不把所有的文本放在一个variables中,然后把它分开?

例如:

  var arrayOfElements = $("#txt").val().split("src="); var replacing = arrayOfElements[1].replace(/"/g, "'"); var url = replacing.split("'"); //You can now access the element by using url[1] 

你可以在这里看到一个工作的例子。 祝你好运!