我正在使用 fetch 来获取HTML文件。到目前为止,我只是想出了如何使用text()方法将响应作为文本数组返回:
fetch(url, {
credentials: 'same-origin'})
.then(function(response) {
return response.text();
}).then(function(text) {
longAssText = text;
textExtract = longAssText.match(/<table class='listing' id='customer-tickets'>[\s\S]*<script type='text\/javascript'>/gi);
});
我回来的字符串看起来像这样(textExtract):
<span class="status status_active">active</span></td>
<td><a href="/tickets/365347-SOME-TITLE">#365347 SOME-TITLE</a></td>
<td>2018-03-12 09:14:34</td>
<td>2018-03-12 10:12:46</td>
<td>some category</td>
</tr>
<tr class='even'>
<td>
<img align="absmiddle" alt="Service_request_ticket" src="/images/service_request_ticket.gif?1520519528" title="some attribute" />
<img align="absmiddle" alt="Number_1" src="/images/number_1.gif?1520519528" title="Saken ligger hos 1. linje" />
<img align="absmiddle" alt="Flag_disabled" src="/images/flag_disabled.png?1520519528" title="Priority: Normal" />
</td>
<td class='ttstatus'><span class="status status_closed">closed</span></td>
<td><a href="/tickets/150640-vs-sender-e-post-brn001ba9bd7a93_000186">#150640 VS: SOME TITLE</a></td>
<td>2013-11-06 08:12:35</td>
<td>2013-11-20 21:00:11</td>
<td>Some category</td>
</tr>
<tr class='odd'>
<td>
我想在 status_active 类前面的每个a-tag中提取文本:“#365347 SOME-TITLE”。
所以:
<a href="/tickets/365347-SOME-TITLE">#365347 SOME-TITLE</a>
我想提取#365347 SOME-TITLE 。
.. span.status_active之后的每个a-tag。
我正在使用正则表达式。我想用regex获取所有实例,但我甚至无法获得第一场比赛。
我尝试过这样的模式
from([\s\S]*?)to
但是我真的很难绕过这个。
我最接近的是:
(status_active)[^._]*(?=\.)
但不是每个文字都有。最后..
正则表达式是否可行?如果是这样,有人会指出我正确的方向吗?
答案 0 :(得分:0)
正则表达方式不。
请使用html解析器(例如DomParser):
parser = new DOMParser();
htmlDoc = parser.parseFromString(text, "text/html");
...
另见着名的 SO answer ......: - )
答案 1 :(得分:0)
试试这个:
var regex = /status_active.*?\n*.*<a.*?>(.*?)<\/a>/gm
var matches = text.match(regex);
console.log(matches);
另一种方法可能是使用jQuery来解析文本并使用选择器来查找相应的节点。就像MarcoS已经说过的那样:这将是一个更清晰的解决方案,因为正则表达式不是解析xml结构的最佳工具。