如何用正则表达式提取JSON对象中cards数组的所有id值
提取JSON中cards数组的所有id值
问题分析
你用的正则"cards":\[\{.*?"id":"([^"]+)"只能匹配第一个id,核心原因是:
- 默认单次匹配模式,未开启全局匹配
.*?是非贪婪匹配,匹配到第一个id后就停止,无法覆盖后续的卡片项
解决方案
优先推荐:用JSON解析工具(最可靠)
正则处理结构化JSON极易因格式变化(比如换行、空格、键顺序调整)失效,直接用对应语言的JSON解析库才是标准做法:
JavaScript示例
// 假设JSON已解析为对象 const data = { "id": "57cea8c", "boardPlugins": [], "pluginData": [], "cards": [ {"id": "57cea8c", "attachments": [], "pluginData": []}, {"id": "57cea8c", "attachments": [], "pluginData": []}, {"id": "57cea8c", "attachments": [], "pluginData": []}, {"id": "57cea8c", "attachments": [], "pluginData": []} ] }; // 提取所有卡片id const cardIds = data.cards.map(card => card.id); console.log(cardIds); // 输出 ["57cea8c", "57cea8c", "57cea8c", "57cea8c"]
Python示例
import json # 你的JSON字符串 json_str = ''' { "id": "57cea8c", "boardPlugins": [], "pluginData": [], "cards": [ {"id": "57cea8c", "attachments": [], "pluginData": []}, {"id": "57cea8c", "attachments": [], "pluginData": []}, {"id": "57cea8c", "attachments": [], "pluginData": []}, {"id": "57cea8c", "attachments": [], "pluginData": []} ] } ''' # 解析JSON并提取id data = json.loads(json_str) card_ids = [card['id'] for card in data['cards']] print(card_ids) # 输出 ['57cea8c', '57cea8c', '57cea8c', '57cea8c']
非要用正则的话(仅适合固定格式场景)
调整正则为全局匹配模式,同时匹配所有"id":"xxx"项(若需限定在cards数组内,可先提取cards子串再匹配):
正则表达式(需开启全局g和多行m标志)
"id":"([^"]+)"
JavaScript使用示例
const jsonStr = '你的JSON字符串'; const regex = /"id":"([^"]+)"/g; const cardIds = []; let match; // 循环捕获所有匹配结果 while ((match = regex.exec(jsonStr)) !== null) { cardIds.push(match[1]); } console.log(cardIds);
注意:如果JSON中存在其他
id字段(比如根节点的id),该正则会一并匹配,此时建议先提取cards数组的子字符串再执行匹配。
内容的提问来源于stack exchange,提问作者Md. Ismiel Hossen Abir
相关产品推荐
相关产品推荐

