Как получить объект из содержимого JS с помощью регулярного выражения

#node.js #regex #cheerio

#node.js #регулярное выражение #приветствую

Вопрос:

Я использую Node.js и приветствие, я хочу объект options из скрипта JS и текст «cases-linear»https://i.imgur.com/oNyJ4Mj.png

 <script type="text/javascript">
 Highcharts.chart("cases-linear", {
  chart: {
    type: "line",
  },
  title: {
    text: "Total Cases",
  },

  subtitle: {
    text: "(Linear Scale)",
  },

  xAxis: {
    categories: ["Mar 12", "Mar 13", "Mar 14", "Mar 15", "Mar 16", "Mar 17", "Mar 18", "Mar 19", "Mar 20", "Mar 21", "Mar 22", "Mar 23", "Mar 24", "Mar 25"],
  },

  yAxis: {
    title: {
      text: "Total Cases",
    },
  },
 });
</script>
  

Комментарии:

1. Синтаксис вашего ввода в настоящее время недействителен. Вам не хватает } . Это просто опечатка? Если да, можете ли вы это исправить?

2. Спасибо @CertainPerformance да, это был тип.

Ответ №1:

Вы можете взять <script> текстовое содержимое, затем сопоставить { с ) прямо перед концом </script> :

 const cheerio = require('cheerio');
const $ = cheerio.load(`<script type="text/javascript">
Highcharts.chart("cases-linear", {
 chart: {
   type: "line",
 },
 title: {
   text: "Total Cases",
 },

 subtitle: {
   text: "(Linear Scale)",
 },

 xAxis: {
   categories: ["Mar 12", "Mar 13", "Mar 14", "Mar 15", "Mar 16", "Mar 17", "Mar 18", "Mar 19", "Mar 20", "Mar 21", "Mar 22", "Mar 23", "Mar 24", "Mar 25"],
 },

 yAxis: {
   title: {
     text: "Total Cases",
   },
 },
});
</script>`);
const scriptContent = $('script')[0].children[0].data;
const [, param1, objText] = scriptContent.match(/"*([^"] )", ({.*)(?=);)/s);
console.log(param1);
console.log(objText);
eval('var obj = '   objText)
console.log(obj);
  

eval это простой вариант, если входные данные заслуживают доверия. В противном случае вы можете использовать анализатор JavaScript для извлечения данных.