You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jq如何实现整词匹配并返回布尔值?

jq实现数组整词匹配并返回布尔值

问题场景

执行以下命令时:

$ echo '["lorem", "ipsum", "dolor"]' | jq '. | contains(["rem"])' 

返回true,但实际需求是整词匹配——只有当"rem"是数组中的元素之一时才返回true,显然这里不符合预期。

另一个尝试的命令:

$ echo '["lorem", "ipsum", "dolor"]' | jq 'select(. | index("rem"))'

无任何输出但jq正常退出,而预期是返回false。需要找到能实现整词匹配且直接返回布尔值的方法。

解决方法

方法1:使用IN操作符(jq 1.6及以上版本支持)

IN($[])可以直接判断目标值是否存在于数组中,返回布尔结果:

# 检查"rem"是否在数组中
$ echo '["lorem", "ipsum", "dolor"]' | jq '"rem" | IN($[])'

输出:false

# 检查存在的元素"lorem"
$ echo '["lorem", "ipsum", "dolor"]' | jq '"lorem" | IN($[])'

输出:true

方法2:用any遍历数组做严格相等判断

如果使用的jq版本低于1.6,可通过any遍历数组元素,判断是否有元素与目标值严格相等:

# 检查"rem"是否在数组中
$ echo '["lorem", "ipsum", "dolor"]' | jq 'any(.[]; . == "rem")'

输出:false

# 检查存在的元素"lorem"
$ echo '["lorem", "ipsum", "dolor"]' | jq 'any(.[]; . == "lorem")'

输出:true

原方法失效原因

  • contains(["rem"])的逻辑是检查数组中是否有元素包含子串"rem",而非整词匹配,所以"lorem"包含"rem"会返回true。
  • select(. | index("rem"))是筛选符合条件的元素,没有匹配元素时就无输出;它本身不返回布尔值,只是过滤输出结果。

内容的提问来源于stack exchange,提问作者170730350

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:43:11