首页 > 解决方案 > 如何从 html 字符串中提取 JavaScript 变量?>

问题描述

我检索了一些基本上如下所示的 JavaScript。也就是说,我将它放在 const 中,如下所示。无需编写一堆难看的解析来寻找变量,有没有一种聪明的方法来获取 traffic_days, traffic_day_persent,traffic-mbytes等的值?

const htmlData = `
 <html>
  <body bgcolor="#ffffff">
    <form method="POST" action="/apply.cgi">
      <div id="main" class="main">
        <script>
          var traffic_days = "13/31";
          var traffic_day_persent = "41";
          var traffic_mbytes = "57346.86/1000000  Mbytes ";
          var traffic_mbytes_persent = "5";
          var warning_value = "";
          if (timereset == "") timereset = "5";
        </script>
      </div>
    </form>
    <script>
      alert('testing');
    </script>
  </body>
 </html>`;

标签: javascript

解决方案


我不知道在不提供解析的东西/模式的情况下使用聪明的解决方案。

假设引号之间的任何变量值都是有效的,只需换掉变量名,“.+”位保持不变:

var trafficDays = htmlData.match('traffic_days = ".+"')[0];

var trafficMbytes = htmlData.match('traffic_mbytes = ".+"')[0];等等

那些对我来说并不难看。抱歉,如果这不是您要找的东西(我还没有代表提问)。

我使用 Node 的 REPL 对此进行了测试:

$ node
> const htmlData = `
...  <html>
...   <body bgcolor="#ffffff">
...     <form method="POST" action="/apply.cgi">
...       <div id="main" class="main">
...         <script>
...           var traffic_days = "13/31";
...           var traffic_day_persent = "41";
...           var traffic_mbytes = "57346.86/1000000  Mbytes ";
...           var traffic_mbytes_persent = "5";
...           var warning_value = "";
...           if (timereset == "") timereset = "5";
...         </script>
...       </div>
...     </form>
...     <script>
...       alert('testing');
...     </script>
...   </body>
...  </html>`;
undefined
> var trafficDays = htmlData.match('traffic_days = ".+"')[0];
undefined
> console.log(trafficDays);
traffic_days = "13/31"

推荐阅读