假设我有一个这样的项目列表:
[
"abcdef",
"defghi",
"euskdh"
]
Run Code Online (Sandbox Code Playgroud)
我想编写一个过滤器,返回包含“a”、“d”或“h”的所有项目。这是我能想到的最好的:
. as $val | select(any(["a", "d", "h"]; inside($val)))
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以不使用变量来做到这一点?
假设您的 jq 有正则表达式支持:
map(select(test("a|d|h")))
Run Code Online (Sandbox Code Playgroud)
或者如果你想要一个值流:
.[] | select(test("a|d|h"))
Run Code Online (Sandbox Code Playgroud)
如果您的 jq 没有正则表达式支持,那么如果它有 any/2,以下将产生一个值流:
.[] | select( any( index( "a", "d", "h"); . != null ) )
Run Code Online (Sandbox Code Playgroud)
其他一切都失败了,以下方法可以完成工作,但效率低下:
.[] | select( [index("a", "d", "h")] | any )
Run Code Online (Sandbox Code Playgroud)