#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 для извлечения данных.