node.js - 将 HTML 元素字符串分成多个字符串
问题描述
我正在使用 puppeteer 进行网页抓取,并且正在尝试提取这个 h4 元素的 innerText 。
<h4 class="loss">
(NA)
<br>
<span class="team-name">TEAMNAME</span>
<br>
<span class="win spoiler-wrap">0</span>
</h4>
我可以使用以下方法获取此元素:
const teamName = await matches.$eval('h4', (h4) => h4.innerHTML);
这会将 teamName 设置为:
(NA)<br><span class="team-name">TEAMNAME</span><br><span class="win spoiler-wrap">0</span>
我试图只获取每个元素的内部文本。
我可以使用 (NA)const s = teamName.substr(0, teamName.indexOf('<'));
但我似乎无法弄清楚如何从这个字符串中获取“TEAMNAME”或“0”。我有使用正则表达式的想法,但我不确定我将如何实现这一点。
PS内部文本并不总是相同,因此我无法查找特定单词。
解决方案
使用正则表达式,您可以这样做:
teamName.match(/<span class="team-name">(.*)<\/span>/)[1]
match
返回一个数组,其中第一个元素是整个正则表达式的匹配项,第二个元素是第一个正则表达式组的匹配项,第三个元素是第二个正则表达式组的匹配项(本例中没有),等等。
/.../
标记匹配它可以找到的第一个最大匹配的正则表达式。.
在正则表达式中是任何字符。*
指定匹配任意次数的字符,包括 0 次。(...)
是一个正则表达式组,由match
. \
是转义字符,因为/
是开始和结束正则表达式的特殊字符。
我非常推荐阅读有关匹配和正则表达式的 Mozilla 文档以了解详细信息。你会经常发现它们很有用。
但是,在 puppeteer 的情况下,可能还有一种直接匹配选择器的方法h4 span
,这比使用正则表达式更直接。我对 puppeteer 的了解还不够,无法告诉你这样做的确切方法。:/
推荐阅读
- delphi - 如何对齐 Windows Media Player 控件以适应父窗口?
- python - 获取使用 os.walk 找到的自定义文件路径
- python - 从基于行的文本文件中过滤文件名和大小?
- javascript - 表单输入,需要帮助设置输入值
- php - 小版本升级后 symfony 测试的问题
- bash - “找不到命令”的基本 bash Bucle
- excel - 获取在 Excel VBA 中组合两列的唯一计数
- javascript - jquery keyup 延迟有效,但搜索值被截断
- javascript - 导入动态命名的导出
- java - Java ArrayList 是从许多类访问相同列表的好方法