Nim 无法使用失败的捕获组检查正则表达式对象

Nim cannot do check regex object with failed captured group

如何检查其中一个 nre 对象成员具有失败的捕获组,例如:

  if m.get.captures[1] == "" : echo "group 1 is empty"

仍然失败,导致

nre.nim(342)            
Error: unhandled exception: Group '1' was not captured [IndexDefect]

因为 m 是

返回的 nre 类型

m = find( "foo", r"(f)o(?:(u)|(o))" )

我们可以看到第 0 组和第 2 组成功了,而不是第 1 组

请帮忙解决

您可以检查索引是否在captureBounds中,如下所示:

import std / nre
let m = find("foo", re"(f)o(?:(u)|(o))")
for i in 0 .. 2:
 if i notIn m.get.captureBounds:
    echo "group ", i, " is empty"
 else:
    echo m.get.captures[i]
# f
# group 1 is empty
# o

playground

注意:我是怎么到那里的(没有用太多或什么东西nre)?我遵循了源代码(从文档中单击,但您也可以从错误消息开始)并且给出它的行是:https://github.com/nim-lang/Nim/blob/7994556f3804c217035c44b453a3feec64405758/lib/impure/nre.nim#L314