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

如何用正则表达式提取JSON中第一个非空的videoUrl字段

提取JSON中第一个非空videoUrl的正确正则写法

问题根源

你的原始正则("videoUrl":)("http.+")有两个明显问题:

  • 贪婪匹配:http.+会一直匹配到字符串末尾的双引号,导致把后面的JSON内容也错误包含进来
  • 未兼容JSON格式细节:没考虑字段与值之间可能存在的空格,也没限定只取第一个符合条件的结果

正确正则表达式

试试这个正则,同时确保你的正则工具/代码只取首次匹配结果:

"videoUrl"\s*:\s*"http[^"]+"

正则逻辑拆解:

  • \s*:匹配0个或多个空格,兼容JSON里videoUrl和冒号、冒号和值之间的任意空格
  • "http[^"]+":精准匹配以http开头的非空值,[^"]表示只匹配到下一个双引号为止,彻底避免过度贪婪的问题
  • 只取首次匹配,就能拿到JSON结构中第一个非空的videoUrl字段

测试你的示例JSON

针对你提供的JSON:

{ "videoUrl":"", "available":"true", "movie":{ "videoUrl":"http..." }, "account":{ "videoUrl":"http...", "login":"", "password":"" } }

这个正则首次匹配的结果就是你想要的:"videoUrl":"http..."

更稳妥的替代方案

其实处理JSON最好用专门的解析库,比正则更可靠,比如Python的示例代码:

import json

json_data = '{ "videoUrl":"", "available":"true", "movie":{ "videoUrl":"http..." }, "account":{ "videoUrl":"http...", "login":"", "password":"" } }'
parsed = json.loads(json_data)

def get_first_non_empty_vid_url(obj):
    if isinstance(obj, dict):
        # 先检查当前对象是否有非空的videoUrl
        if "videoUrl" in obj and obj["videoUrl"].strip() != "":
            return f'"videoUrl":"{obj["videoUrl"]}"'
        # 递归遍历子对象
        for val in obj.values():
            res = get_first_non_empty_vid_url(val)
            if res:
                return res
    return None

print(get_first_non_empty_vid_url(parsed))

运行后会输出预期的"videoUrl":"http...",这种方法能处理更复杂的JSON嵌套结构,不会因为格式变化出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:43:37