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

如何使用正则表达式在JSON哈希中查找匹配的Macros条目?

问题原因

你的原有写法存在3个核心逻辑错误:

  • 数据结构读取错误:API返回的根节点下macros是数组,不存在顶层的value键,macros["value"]本身就会返回nil
  • 正则使用方式错误:Ruby中不能把正则表达式当做哈希的键来取值,正则匹配需要用=~或者match?方法
  • 缺少遍历逻辑:没有遍历每个macro下的actions数组,无法校验每个action的value是否符合规则

解决代码

# 定义目标正则,m修饰符开启多行匹配适配含换行的value
target_regex = /^DE([0-9a-zA-Z]\s?){20}$/m

# 筛选符合条件的macro条目
filtered_macros = jsObj["macros"].select do |macro|
  # 只要actions数组中存在任意一个value匹配正则,就保留当前macro
  macro["actions"].any? do |action|
    # to_s避免value为nil时抛出异常,可根据需要加.strip去除首尾空白
    action["value"].to_s.match?(target_regex)
  end
end

# 按你期望的格式封装返回结果
result = { "macros" => filtered_macros }

适配调整建议

  • 如果你的目标字符串前后存在多余的空格、换行,可以把匹配逻辑改为action["value"].to_s.strip.match?(target_regex),同时可以去掉正则首尾的^和$锚点降低匹配限制
  • 如果你需要的是只保留每个macro里符合匹配的action,过滤掉不符合的action,可以用以下逻辑处理:
filtered_macros = jsObj["macros"].map do |macro|
  # 筛选当前macro下符合规则的actions
  matched_actions = macro["actions"].select { |a| a["value"].to_s.match?(target_regex) }
  # 只有存在匹配的action时才保留该macro
  matched_actions.any? ? macro.merge("actions" => matched_actions) : nil
end.compact

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:15:01