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