首页 > 解决方案 > 通过 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)&nbsp;:<\/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\\)&nbsp;\\:<\\/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\\)&nbsp;\\:<\\/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\\)&nbsp;\\:<\\/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&nbsp;\\:<\\/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">简体中文&lt;/option>
                                <option value="9">한국어&lt;/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)&nbsp;:</span>
                    </dt>
                    <dd class="value clearfix">
                        <div class="preserve-white-space">405/405XL</div>
                    </dd>
                    <dt class="key">
                        <span class="key">Cyan (C)&nbsp;:</span>
                    </dt>
                    <dd class="value clearfix">
                        <div class="preserve-white-space">405/405XL</div>
                    </dd>
                    <dt class="key">
                        <span class="key">Magenta (M)&nbsp;:</span>
                    </dt>
                    <dd class="value clearfix">
                        <div class="preserve-white-space">405/405XL</div>
                    </dd>
                    <dt class="key">
                        <span class="key">Gelb (Y)&nbsp;:</span>
                    </dt>
                    <dd class="value clearfix">
                        <div class="preserve-white-space">405/405XL</div>
                    </dd>
                    <dt class="key">
                        <span class="key">Wartungsbox&nbsp;:</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&nbsp;:</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&nbsp;:</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&nbsp;:</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&nbsp;:</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&nbsp;:</span>
                    </dt>
                    <dd class="value clearfix">
                        <div class="preserve-white-space">04.51.SH20KA</div>
                    </dd>
                    <dt class="key">
                        <span class="key">Stammzertifikat-Version&nbsp;:</span>
                    </dt>
                    <dd class="value clearfix">
                        <div class="preserve-white-space">02.02</div>
                    </dd>
                    <dt class="key">
                        <span class="key">Seriennummer&nbsp;:</span>
                    </dt>
                    <dd class="value clearfix">
                        <div class="preserve-white-space">SDFKOPE2D</div>
                    </dd>
                    <dt class="key">
                        <span class="key">Netzwerk-MAC-Adresse&nbsp;:</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&nbsp;:</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&nbsp;:</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>

标签: javascriptnode.jsregex

解决方案


推荐阅读