javascript - 通过 RegEx 解析值时的错误顺序
问题描述
我想从其网站解析我的打印机的状态。
这是我的代码,它运行良好,期望while循环的结果顺序:
const https = require('https')
const options = {
hostname: '192.168.178.35',
port: 443,
path: '/PRESENTATION/ADVANCED/INFO_PRTINFO/TOP',
method: 'GET',
rejectUnauthorized: false,
}
const req = https.request(options, res => {
res.on('data', d => {
console.log(d)
let match;
let rx;
rx = new RegExp(/(?:MAC-Adresse|Printer Name|Adresse MAC Wi-Fi\/R.seau|Indirizzo MAC Wi-Fi\/rete|Dirección MAC de Wi-Fi\/Red|Endereço MAC de Wi-Fi\/Rede) :<\/span><\/dt><dd class=\"value clearfix\"><div class=\"preserve-white-space\">([a-zA-Z0-9:]*)<\/div>/g);
while ((match = rx.exec(d)) != null) {
let mac_string = match[1];
console.log(mac_string)
}
let inks = [
{
name: 'Cyan',
inklvl_rx: "IMAGE\/Ink_C\.PNG\' height=\'([0-9]{1,2})\'",
cartridge_rx: "\\(C\\) \\:<\\/span><\\/dt><dd class=\\\"value clearfix\\\"><div class=\\\"preserve-white-space\\\">([a-zA-Z0-9\\/]*)<\\/div>"
},
{
name: 'Black',
inklvl_rx: "IMAGE\/Ink_K\.PNG\' height=\'([0-9]{1,2})\'",
cartridge_rx: "\\(BK\\) \\:<\\/span><\\/dt><dd class=\\\"value clearfix\\\"><div class=\\\"preserve-white-space\\\">([a-zA-Z0-9\\/]*)<\\/div>"
},
{
name: 'Magenta',
inklvl_rx: "IMAGE\/Ink_M\.PNG\' height=\'([0-9]{1,2})\'",
cartridge_rx: "\\(M\\) \\:<\\/span><\\/dt><dd class=\\\"value clearfix\\\"><div class=\\\"preserve-white-space\\\">([a-zA-Z0-9\\/]*)<\\/div>"
},
{
name: 'Waste',
inklvl_rx: "IMAGE\/Ink_Waste\.PNG\' height=\'([0-9]{1,2})\'",
cartridge_rx: "Wartungsbox \\:<\\/span><\\/dt><dd class=\"value clearfix\\\"><div class=\\\"preserve-white-space\\\">([a-zA-Z0-9\\/]*)<\\/div>"
}
];
// read cartridge
inks.forEach(ink => {
rx = new RegExp(ink.inklvl_rx, "g");
while ((match = rx.exec(d)) != null) {
var ink_string = match[1];
console.log(ink_string)
}
rx = new RegExp(ink.cartridge_rx, "g");
while ((match = rx.exec(d)) != null) {
var cartridge_string = match[1];
console.log(cartridge_string)
}
})
})
})
req.on('error', error => {
console.error(error)
})
req.end()
最后输出第一个while循环解析的MAC地址。
你能解释一下为什么所有while循环的顺序不同吗?
输入:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="SEIKO EPSON">
<meta name="format-detection" content="telephone=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>WF-4820 Series</title>
<link rel='stylesheet' type='text/css' href='../COMMON/STYLE.CSS'>
<script type='text/javascript' src='SCRIPT.JS'></script>
</head>
<body class="contents">
<div class="wrap">
<div class="header-main">Produktstatus</div>
<div class="section">
<fieldset class="group no-legend">
<form target="_top" action="/PRESENTATION/ADVANCED/COMMON/TOP" method="post" id="input_form" name="input_form">
<ul class="values">
<li class="value clearfix">
<select class="select" id="SEL_LANGA" name="SEL_LANGA" onchange="return document.input_form.submit();">
<option value="1">English</option>
<option value="2">Français</option>
<option value="4" selected>Deutsch</option>
<option value="3">Italiano</option>
<option value="5">Español</option>
<option value="6">Português</option>
<option value="7">Nederlands</option>
<option value="8">Русский</option>
<option value="12">Norsk</option>
<option value="13">Svenska</option>
<option value="14">Suomi</option>
<option value="15">polski</option>
<option value="16">Čeština</option>
<option value="17">Magyar</option>
<option value="18">Dansk</option>
<option value="19">Türkçe</option>
<option value="20">Ελληνικά</option>
<option value="21">Slovensky</option>
<option value="22">Română</option>
<option value="23">Україна</option>
<option value="10">繁體中文</option>
<option value="11">简体中文</option>
<option value="9">한국어</option>
</select>
</li>
</ul>
</form>
</fieldset>
<fieldset class="group no-legend">
<fieldset class="group">
<legend>Druckerstatus</legend>
<ul class="values">
<li class="value clearfix">
<div class="preserve-white-space">Verfügbar</div>
</li>
</ul>
<ul class="values">
<li class="value clearfix">
<div class="preserve-white-space"></div>
</li>
</ul>
</fieldset>
<fieldset class="group">
<legend>Scannerstatus</legend>
<ul class="values">
<li class="value clearfix">
<div class="preserve-white-space">Verfügbar</div>
</li>
</ul>
<ul class="values">
<li class="value clearfix">
<div class="preserve-white-space"></div>
</li>
</ul>
</fieldset>
<div id="ELSE_STATUS">
<fieldset class="group">
<legend>Anderer Status</legend>
<ul class="values">
<li class="value clearfix">
<div class="preserve-white-space">
<noscript>Aktivieren Sie die JavaScript-Einstellung des Browsers.</noscript>
</div>
</li>
<li class="value clearfix">
<div class="preserve-white-space" id="ELSE_STATUS_WARNING_RESTART">Die Einstellung, die einen Neustart erfordert, wurde geändert. Schalten Sie das Gerät aus und wieder ein.</div>
</li>
</ul>
</fieldset>
</div>
<script type="text/javascript">
//
HideElseStatus(); //-->
</script>
</fieldset>
<div class="information-last clearfix ">
<ul class="inksection">
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_K.PNG' height='48' style=''>
</div>
<div class='clrname'>BK</div>
</li>
<!--
-->
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_C.PNG' height='48' style=''>
</div>
<div class='clrname'>C</div>
</li>
<!--
-->
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_M.PNG' height='48' style=''>
</div>
<div class='clrname'>M</div>
</li>
<!--
-->
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_Y.PNG' height='48' style=''>
</div>
<div class='clrname'>Y</div>
</li>
<!--
-->
<li class='tank'>
<div class='tank'>
<img class='color' src='../../IMAGE/Ink_Waste.PNG' height='47' style=''>
</div>
<div class='mbicn'>
<img src='../../IMAGE/Icn_Mb.PNG' height='18' width='18'>
</div>
</li>
</ul>
</div>
<fieldset class="group no-legend">
<dl class="values">
<dt class="key">
<span class="key">Schwarz (BK) :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">405/405XL</div>
</dd>
<dt class="key">
<span class="key">Cyan (C) :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">405/405XL</div>
</dd>
<dt class="key">
<span class="key">Magenta (M) :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">405/405XL</div>
</dd>
<dt class="key">
<span class="key">Gelb (Y) :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">405/405XL</div>
</dd>
<dt class="key">
<span class="key">Wartungsbox :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">T6715</div>
</dd>
</dl>
</fieldset>
<fieldset class="group no-legend">
<fieldset class="group">
<legend>Kassette 1</legend>
<dl class="values">
<dt class="key">
<span class="key">Papiergröße :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">A4 210 x 297 mm</div>
</dd>
<dt class="key">
<span class="key">Papiertyp :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">Normalpapier</div>
</dd>
</dl>
</fieldset>
</fieldset>
<fieldset class="group no-legend">
<dl class="values">
<dt class="key">
<span class="key">Epson Connect-Status :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">Nicht registriert</div>
</dd>
<dt class="key">
<span class="key">Epson Connect-eMail-Adresse :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space"></div>
</dd>
</dl>
</fieldset>
<fieldset class="group no-legend">
<dl class="values">
<dt class="key">
<span class="key">Firmware :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">04.51.SH20KA</div>
</dd>
<dt class="key">
<span class="key">Stammzertifikat-Version :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">02.02</div>
</dd>
<dt class="key">
<span class="key">Seriennummer :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">SDFKOPE2D</div>
</dd>
<dt class="key">
<span class="key">Netzwerk-MAC-Adresse :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space">XX:XX:XX:XX:XX:XX</div>
</dd>
</dl>
</fieldset>
<fieldset class="group no-legend">
<dl class="values">
<dt class="key odd">Datum und Zeit :</dt>
<dd class="value odd">
<div class="clearfix">06-02-2021 15:28 UTC+00:00</div>
</dd>
</dl>
</fieldset>
<fieldset class="group no-legend">
<dl class="values">
<dt class="key">
<span class="key">Administratorname/Kontaktinformationen :</span>
</dt>
<dd class="value clearfix">
<div class="preserve-white-space"></div>
</dd>
</dl>
</fieldset>
<script type="text/javascript">
//
initialize(); //-->
</script>
</div>
<div class="footer">
<form action="" method='get' id='refresh_form'>
<div>
<input type='hidden' value='' name='tm'>
</div>
</form>
<script type="text/javascript">
//
document.getElementById('refresh_form').tm.value = new Date().getTime(); //-->
</script>
<table width="100%">
<tr>
<td class="footer_button" align="left">
<ul class="buttons">
<li class="button">
<button type="button" class="button" onclick="document.getElementById('refresh_form').submit(); return false;">Aktualisieren</button>
</li>
</ul>
</td>
<td class="footer_license" align="right">
<a class="license" target="_blank" href="/PRESENTATION/ADVANCED/LICENSE/TOP">Softwarelizenzen</a>
</td>
</tr>
</table>
</div>
</div>
</body>
</html>
解决方案
推荐阅读
- sql - Informatica,使用来自另一个表的输入创建新表
- reactjs - React-router- 更改获取数据的 url
- windows - 使用 dup2 或类似方法重定向文件句柄
- javascript - 使用 Angular 4 订阅的行为主题
- c++ - 使用 QSerialPort 发送批量短信的延迟
- scala - 带有比较和循环的 Scala 内联追加
- javascript - 如何在 URL 中使用带有井号标签的 GET 方法?
- powershell - 另一个具有相同属性 identifierUris 值的对象已经存在
- node.js - 是否有必要验证加密的密码服务器端?
- angular - Angular 5 'Content-Type':'multipart/form-data' 被重置为 'application/json'