如何让我的正则表达式捕获大括号对并在该对之后停止匹配

问题描述 投票:0回答:1

假设我们正在查看如下所示的一些文本

type vehicle = {
    type: 'car' | 'truck',
    cylinders: number,
    options: string[],
    trim: {
        upholstery: string,
        exteriorColor: string,
        gearbox: string
    }
}

export {
    vehicle
}

我想捕获“type Vehicle = {.....}”所以匹配将是

type vehicle = {
    type: 'car' | 'truck',
    cylinders: number,
    options: string[],
    trim: {
        upholstery: string,
        exteriorColor: string,
        gearbox: string
    }
}

我正在使用这个正则表达式

/type\s*[a-zA-z0-]+\s*=\s*{[\s\S]*}/g

希望它能捕获

type name = {
之间的
}
东西。好吧,它做得有点太好了,所以只要以“type name =”开头的东西它就会继续捕获,并且它可以找到成对的大括号。因此导出语句也被捕获。

我还尝试使用 /u 来表示不贪婪,但未能捕获对象的最后一个大括号。

我相信这部分是问题所在,但我很难找到解决方案

{[\s\S]*}

javascript regex regex-lookarounds
1个回答
0
投票

如果您在 JSON 中始终具有这种精确格式,则可以使用:

^type[\s\S]+?^}

匹配从

type
到行首的
}

参见:https://regex101.com/r/vmJs4B/latest

但是,我同意您问题的评论者的观点,即为了普遍解决这个问题,正则表达式不是合适的工具。

© www.soinside.com 2019 - 2024. All rights reserved.