我正在使用请求库调用网页,我将响应正文存储为javascript变量。响应正文由页面的HTML组成。忽略这是javascript的事实,我无法编辑下面的代码。把它想象成我需要执行正则表达式的文本字符串。
下面是响应正文的片段,但我需要执行一些正则表达式来提取sales_rank
数组的内容。
到目前为止,我有以下内容,但我很难知道下一步该怎么做:
\sales_ranks = \[()/g
(function() {
var chart = $(document).find('#flot-chart'),
sales_ranks = [
[1498101635000, 0],
[1498187306000, 0],
[1498274424000, 0],
[1498360866000, 0],
[1498447842000, 0],
[1498534646000, 0],
[1498620767000, 0],
[1498706919000, 0],
[1498793120000, 259312],
[1498879764000, 490981],
[1498965369000, 633892],
[1499052315000, 792398],
[1499138463000, 215732],
[1499225377000, 435596],
[1499311360000, 110890],
[1499398681000, 299988],
[1499484963000, 194321],
[1499571308000, 184823],
[1499657546000, 282991],
[1499744175000, 96775],
[1499830311000, 399822],
[1499916360000, 483213],
[1500002994000, 284743],
[1500089388000, 163017],
[1500175564000, 101008],
[1500261919000, 131600],
[1500349007000, 60496],
[1500434715000, 134451],
[1500521280000, 151996],
[1500607500000, 145079],
]
如果有人知道如何做到这一点,如果你能提供帮助,我们将不胜感激。或者,如果您知道在将jtml存储在javascript变量中时提取数组的方法,那么也可以使用
答案 0 :(得分:2)
对于您的给定文本,以下正则表达式应该有效:
/\bsales_ranks\s*=\s*\[(?:\s*\[[^\]]+\],)+\s*\]/ig
RegEx分手:
\b
:断言词边界sales_ranks
:匹配文字sales_ranks
\s*=\s*
:匹配=
,两边都有空格\[
:匹配文字[
(?:
:启动非捕获组
\s*\[[^\]]+\],
:匹配空格后跟[...],
元素)+
:结束非捕获组。 +
表示匹配所有内部元素\s*
:匹配0个或更多空格\]
:匹配上次结算]
答案 1 :(得分:1)
我吮吸正则表达式,所以我的方法是在salesrank =
分开并遍历所有[]
括号,直到找到最后一个
var str = getText().split('sales_ranks =')[1].trim(),
openBraces = false,
lastBraceIndex;
for (var i = 1; i < str.length; i++) {
if (str[i] == '[') {
openBraces = true;
} else if (str[i] == ']') {
if (openBraces) {
openBraces = false
} else {
lastBraceIndex = i;
break;
}
}
}
var json = str.slice(0, lastBraceIndex + 1)
// parse json to show valid array returned
console.log(JSON.parse(json))
function getText() {
return `
(function() {
var chart = $(document).find('#flot-chart'),
sales_ranks = [
[1498101635000, 0],
[1498187306000, 0],
[1498274424000, 0],
[1498360866000, 0],
[1498447842000, 0],
[1498534646000, 0],
[1498620767000, 0],
[1498706919000, 0],
[1498793120000, 259312],
[1498879764000, 490981],
[1498965369000, 633892],
[1499052315000, 792398],
[1499138463000, 215732],
[1499225377000, 435596],
[1499311360000, 110890],
[1499398681000, 299988],
[1499484963000, 194321],
[1499571308000, 184823],
[1499657546000, 282991],
[1499744175000, 96775],
[1499830311000, 399822],
[1499916360000, 483213],
[1500002994000, 284743],
[1500089388000, 163017],
[1500175564000, 101008],
[1500261919000, 131600],
[1500349007000, 60496],
[1500434715000, 134451],
[1500521280000, 151996],
[1500607500000, 145079]
];
var someotherarray =[1,2,3,4];
}();
`
}
&#13;
请注意,示例中的最后一个尾随逗号会破坏json解析。从此示例中删除
答案 2 :(得分:0)
您可以使用:
var result = YOUR_VARIABLE.match(/sales_ranks\s*=\s*\[(.|\n|\r)*?\s+\]/gmi)[0];