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

如何使用JS正则表达式匹配字符串中指定的类对象模式片段

正则提取指定JSON对象片段方案

你之前的正则匹配到字符串末尾,核心原因是.*属于贪婪匹配规则,会尽可能匹配最长的符合规则的内容,直到找到字符串中最后一个}才终止,因此会把后续的其他对象片段也包含进去。

修正后的正则写法

只需要将贪婪匹配改成非贪婪匹配即可,两种常用写法如下:

  • 推荐用正则字面量写法,不需要额外处理转义,出错概率更低:
var str='[{"id":"abcd","pin":5},{"id":"efgh","pin":6}]';
const matchRes = str.match(/{"id":"abcd".*?}/);
console.log(matchRes[0]) // 输出:{"id":"abcd","pin":5}
  • 如果必须使用new RegExp构造函数写法,直接把非贪婪标识加上即可:
var str='[{"id":"abcd","pin":5},{"id":"efgh","pin":6}]';
const matchRes = str.match(new RegExp('{"id":"abcd".*?}'));
console.log(matchRes[0]) // 输出:{"id":"abcd","pin":5}

匹配原理

  • .*:贪婪模式,从匹配起始位置开始向后匹配所有字符,直到满足后续匹配规则的最远位置才停止,这也是你之前的正则匹配到整个字符串末尾的原因。
  • .*?:非贪婪模式,从匹配起始位置开始向后匹配,碰到第一个满足后续匹配规则的位置就停止,这里碰到第一个}就终止匹配,刚好能拿到完整的单个对象片段。

注意:如果待匹配的对象内部存在嵌套的{}结构,上述简单正则会出现匹配错误。这种场景更推荐直接将字符串解析为原生JS结构再查找对应项,鲁棒性远高于正则匹配,示例代码如下:

var str='[{"id":"abcd","pin":5},{"id":"efgh","pin":6}]';
const target = JSON.parse(str).find(item => item.id === 'abcd');
console.log(target) // 输出:{id: 'abcd', pin: 5}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:21:28