Skip to main content
 首页 » 编程设计

javascript之使用正则表达式匹配 JSON

2025年05月04日37me-sa

我有一个包含许多对象文字的 JavaScript 文件:

// lots of irrelevant code 
oneParticularFunction({ 
    key1: "string value", 
    key2: 12345, 
    key3: "strings which may contain ({ arbitrary characters })" 
}); 
// more irrelevant code 

我需要编写一些 Python 代码来提取这些文字。

我的第一次尝试是正则表达式 oneParticularFunction\(\{(.*?)\}\);。但如果字面量包含“})”,则此操作失败。

因为我知道对象将是有效 JavaScript 文件中的有效 JSON(匹配的引号、大括号等),是否有更优雅的方法来提取它们?

(换句话说,困难在于删除我不关心的所有其他 JavaScript 代码。)

编辑:最后,我对任何不包含子对象的对象使用了正则表达式...

oneParticularFunction\((\{([^"}]*"[^"]*"[^"}]*)*?[^"]*?\})\); 

...并手动跟踪打开/关闭大括号以处理任何带有嵌套的内容。

请您参考如下方法:

为什么不写一个状态机来读取 { 并在每个 { 上递增一个计数器并在每个 } 上递减它所以当它再次达到 0 时,获取中间的所有字符并使用 python 中的 json 解析器来检查它是否是否有效?这样,您可以获得语法错误的好处,而不是从正则表达式中简单匹配不匹配(记住 python 是免费的,因此不可能出现误报)。