正则表达式从内容中获取数组?

时间:2017-07-21 15:37:45

标签: javascript arrays regex

我正在使用请求库调用网页,我将响应正文存储为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变量中时提取数组的方法,那么也可以使用

3 个答案:

答案 0 :(得分:2)

对于您的给定文本,以下正则表达式应该有效:

/\bsales_ranks\s*=\s*\[(?:\s*\[[^\]]+\],)+\s*\]/ig

RegEx Demo

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;
&#13;
&#13;

请注意,示例中的最后一个尾随逗号会破坏json解析。从此示例中删除

答案 2 :(得分:0)

您可以使用:

var result = YOUR_VARIABLE.match(/sales_ranks\s*=\s*\[(.|\n|\r)*?\s+\]/gmi)[0];