Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
Javascript 使用regex提取数据-可选捕获组导致问题_Javascript_Regex - Fatal编程技术网

Javascript 使用regex提取数据-可选捕获组导致问题

Javascript 使用regex提取数据-可选捕获组导致问题,javascript,regex,Javascript,Regex,我有一个测试字符串,我想使用Regex从中提取数据: “->使用时的单行索引查找(actor\u id=actor.actor\u id)(成本=901.66行=5478)(实际时间=0.001..0.001行=0循环=200)” 我要提取的六个数据字段以粗体书写。斜体书写的段是语句的可选部分 这就是我到目前为止得出的模式: ->(.+)(\(成本=([\d\.]+)行=(\d+))\(实际时间=([\d\.]+)行=(\d+)循环=(\d+) 这给了我六组我想要的所有数据。但是,当我省略字符串

我有一个测试字符串,我想使用Regex从中提取数据:

“->使用时的单行索引查找(actor\u id=actor.actor\u id)(成本=901.66行=5478)(实际时间=0.001..0.001行=0循环=200)”

我要提取的六个数据字段以粗体书写。斜体书写的段是语句的可选部分

这就是我到目前为止得出的模式:

->(.+)(\(成本=([\d\.]+)行=(\d+))\(实际时间=([\d\.]+)行=(\d+)循环=(\d+)

这给了我六组我想要的所有数据。但是,当我省略字符串的可选部分时,它根本不匹配。我怀疑这是因为多余的空格,所以我认为将空格移动到可选组中可能会有用,如下所示:

->(.+)(\(成本=([\d\.]+)行=(\d+))\(实际时间=([\d\.]+)行=(\d+)循环=(\d+)

这是行不通的


它似乎与作为第一组的一部分的可选组相匹配,这并不是我真正想要的。我想把它们分开,但我不太确定怎么做。

你必须做第一个
(.+)
惰性量词
(.+?)


#(.+?)[]?((?@RokoC.Buljan)我知道这看起来可能有点混乱,但第一组实际上只是关于特定查询操作的信息,并不完全相关。它很可能是“嵌套循环内部联接”,而不是“使用时的单行索引查找(actor\u id=actor.actor\u id)”与本例相同。因此,您希望检索:
关于使用(actor\u id=actor.actor\u id)
的单行索引查找,而不是可选的
901.66
5478
。和
0.001..0.001
200
?@RokoC.Buljan是的。这是正确的。“您必须创建第一个(++)惰性量词(+.?)”谢谢,问题解决了。非常感谢。
 # (.+?)[ ]?((?<=[ ])\(cost=([\d\.]+)[ ]rows=(\d+)\))?[ ]\(actual[ ]time=([\d\.]+)[ ]rows=(\d+)[ ]loops=(\d+)\)
 
 ( .+? )                       # (1)
 [ ]? 
 (                             # (2 start)
    (?<= [ ] )
    \( cost=
    ( [\d\.]+ )                   # (3)
    [ ] rows=
    ( \d+ )                       # (4)
    \) 
 )?                            # (2 end)
 [ ] 
 \( 
 actual [ ] time=
 ( [\d\.]+ )                   # (5)
 [ ] 
 rows=
 ( \d+ )                       # (6)
 [ ] 
 loops=
 ( \d+ )                       # (7)
 \)