Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 用于在特定标识符之间重新编写组捕获的正则表达式_.net_Regex_Parsing_Regex Group - Fatal编程技术网

.net 用于在特定标识符之间重新编写组捕获的正则表达式

.net 用于在特定标识符之间重新编写组捕获的正则表达式,.net,regex,parsing,regex-group,.net,Regex,Parsing,Regex Group,下面是我试图解析的数据示例: //lots of html source code ['unimportant','example data'] $(function() { var graph = new lineChart('chart-im-looking-for', { 'width' : 1100, 'height' : 600, 'font' : 'Arial', //more javascript code here 'groups': [ {

下面是我试图解析的数据示例:

//lots of html source code
['unimportant','example data']
$(function() {

 var graph = new lineChart('chart-im-looking-for',
 {
  'width' : 1100, 'height' : 600,
  'font' : 'Arial',
  //more javascript code here
  'groups':
    [
    {
    //more javascript code here
    'values' : [
        {'x':1386374400, 'y':49.82, 'hover':['12/7',49.82], 'xlabel':'12/7'},
        {'x':1386460800, 'y':47.67, 'hover':['12/8',47.67], 'xlabel':'12/8'},
        {'x':1386547200, 'y':45.43, 'hover':['12/9',45.43], 'xlabel':'12/9'},
        {'x':1386633600, 'y':47, 'hover':['12/10',47], 'xlabel':'12/10'},
        {'x':1386720000, 'y':46.81, 'hover':['12/11',46.81], 'xlabel':'12/11'}
    ]
    }
    ]
  });
['unimportant','example data']
//lots of html source code
我需要从两组“hover”数组中获取数据。请注意,在需要获取其数据的图表前后,有更多相同格式的图表,因此我需要通过其id(本例中为“chart-im-looking-for”)识别正确的图表

我尝试了以下正则表达式:

(?<=lineChart\('chart-im-looking-for'.*?'values'.*?)\['(.*?)',(.*?)]

(?您必须将模式稍微更改为1)仅匹配“值”数组中的数组(悬停),以及2)仅匹配正确值数组中的数组。这是我的尝试:

(?<=lineChart\('chart-im-looking-for'[^\$]*?'values'\s+:\s+\[([^\[]|\[[^\[]*\])*)\['(.*?)',(.*?)]
                                     ^^^^^<-2    2->^^^^^^/\^^^^^^^^<-1

(?使用此正则表达式获取特定图表:

new lineChart\(['"]([^"']+)["'],\s*(.+?})\s*\)\s*;
添加了选项:
RegexOptions.Singleline
,这将匹配到第一次出现
}),这是我在现场能想到的最健壮的

此正则表达式的第一个捕获组将为您提供图表名称。第二个捕获组将为您提供一个完整的、最有可能是可解析的JSON字符串。将其放入JSON解析器中,并随意访问“值”>“悬停”


目前匹配的是什么?我假设所有
[…]
数组都匹配在
'values'
之后的数组(一次一个),因为它们的查找都匹配。@Njol,是的,“values”之后的所有数组都匹配。理想情况下,我希望正则表达式引擎在“values”数组的右方括号结束后停止匹配。为什么不简单地
'hover':\['(.*?),(.*?)
?@ClasG,因为你应该阅读这个问题;):请注意,在需要获取其数据的图表之前和之后,有更多相同格式的图表,因此我需要通过其id(在本例中为“chart-im-looking-for”)标识正确的图表。这仅捕获第一个“hover”数组中的值。另外,我宁愿避免对文档进行任何假设,以防其中一个“lineChart”变量中有一个美元符号,或者文档的格式会随着空格的数量而变化。@sds您必须进行一些假设。但是,您可以通过分几个步骤解析文档来减少它们:首先获取整个“我要查找的图表”,然后从中提取值,最后一步从值中获取所有悬停数组。这是三个非常简单的正则表达式,例如第一个是
lineChart\('chart-im-looking-for'(.*))对文档进行最小假设。您甚至可以使用JSON解析器来解析整个图表,以获取图表的所有信息。编辑后的正则表达式仍然只为我捕获第一个“hover”数组值。我正在RegexBuddy中对问题中的示例数据进行测试,使用.NET风格,使用和不使用“dot matches newline”选项。顺便说一句,使用JSON解析器是个好主意,但我还是想得到一个可以工作的正则表达式,只是为了满足我的好奇心。@sds我忘了一个
*
。这是我最后一次尝试:p这一次似乎是从源代码更深处的任何js数组捕获数据,前提是它们不在以美元符号开头的函数中(或者不管是什么,我不熟悉JavaScript/jQuery)。我想这是最好的方法。但是,如果“新折线图”声明中的某个地方有一个结束括号,则此操作将失败。是否有可能使这个正则表达式更简单,或者唯一的选择是假设没有结束括号?更新正则表达式以匹配第一个(
而不是第一个
还有一个问题-为什么要使用前瞻(例如
新折线图\('chartId',\s*(.+?}(?=\s*)\s*;)
),而不是常规匹配(例如
新折线图\('chartId',\s*(.+?})\s*)\s*;
)。结果不一样吗?这两种正则表达式都有好处吗?这是个好问题,我不知道我在想什么。这里绝对不需要前瞻。感谢您的所有输入。