正则表达式帮助 - 包括但不显示

时间:2016-08-23 18:33:23

标签: javascript regex

我有this.responseText,这很乱。试图将我需要的东西分开:

以下是文字:

<html>
<head><title>Index of /browserify-view/build/source/pic/</title></head>
<body bgcolor="white">
<h1>Index of /browserify-view/build/source/pic/</h1><hr><pre><a href="../">../</a>
<a href="wd0c9af04bbf54efc9a2f7ba766a6694f2421b1dc.png">wd0c9af04bbf54efc9a2f7ba766a6694f2421b1dc..&gt;</a> 22-Jul-2016 22:29               65180
<a href="thumb-wd20f381801bb51.png">thumb-wd20f381801bb51.png;</a> 22-Jul-2016 22:33               10779
</pre><hr></body>
</html>

我怎么能像这样分开:

wd0c9af04bbf54efc9a2f7ba766a6694f2421b1dc.png

thumb-wd20f381801bb51.png

3 个答案:

答案 0 :(得分:0)

这是迄今为止我在此主题上看到的最佳回复之一: RegEx match open tags except XHTML self-contained tags

如果你想快速做点什么,我会看这样的东西(python):

<a[^>]+href="(?P<x>[^"]+)">

请注意,它的不良做法如果要在更大范围内执行(除了这个html之外的任何东西)我会推荐一个html解析器。从长远来看,这将节省大量时间。

答案 1 :(得分:-1)

你可以做到

str.scan(/(?<=<a href=").+?\.png/)

这将返回一个数组:

["wd0c9af04bbf54efc9a2f7ba766a6694f2421b1dc.png", "thumb-wd20f381801bb51.png"]

打破正则表达式

/(?<=<a href=").+?\.png/
  • (?<=<a href=")是一个积极的外观,它与主表达式之前的<a href="字符串匹配,而不在结果中包含它。

  • .+?使用惰性运算符匹配任何字符1次或多次,该运算符匹配可能的最小字符数。

  • \.png.png

  • 相匹配

答案 2 :(得分:-1)

首先,不要使用正则表达式执行此操作!

Regex is NOT capable of parsing HTML

改为使用javascript DOMParser

var parser = new DOMParser();
var doc = parser.parseFromString(this.responseText, 'text/html');

然后使用DOM API获取所需的元素:

var nodes = doc.querySelectorAll('a:not([href="../"])');

最后,使用Array.map将节点映射到其href属性:

// Can't use nodes.map here because nodes in a NodeList, not an array
var links = Array.prototype.map.call(nodes, function(element)
{
    // Can't use element.href here because we're in a different document
    return element.getAttribute('href');
});

如果你把它们放在一起:

var exampleResponseText = `<html>
<head><title>Index of /browserify-view/build/source/pic/</title></head>
<body bgcolor="white">
<h1>Index of /browserify-view/build/source/pic/</h1><hr><pre><a href="../">../</a>
<a href="wd0c9af04bbf54efc9a2f7ba766a6694f2421b1dc.png">wd0c9af04bbf54efc9a2f7ba766a6694f2421b1dc..&gt;</a> 22-Jul-2016 22:29               65180
<a href="thumb-wd20f381801bb51.png">thumb-wd20f381801bb51.png;</a> 22-Jul-2016 22:33               10779
</pre><hr></body>
</html>`;

var parser = new DOMParser();
var doc = parser.parseFromString(exampleResponseText, 'text/html');
var nodes = doc.querySelectorAll('a:not([href="../"])');
var links = Array.prototype.map.call(nodes, function(element)
{
    return element.getAttribute('href');
});

console.log(links);