假设我们正在查看如下所示的一些文本
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]*}
如果您在 JSON 中始终具有这种精确格式,则可以使用:
^type[\s\S]+?^}
匹配从
type
到行首的 }
。
参见:https://regex101.com/r/vmJs4B/latest
但是,我同意您问题的评论者的观点,即为了普遍解决这个问题,正则表达式不是合适的工具。