Я пытаюсь разобрать кучу javascript файлов и вытащить определенные объекты. Пример файла будет:
import { foo } from "blah";
import { bar, baz } from "../module";
const myobject = {
name: NAME,
title: {
name: `${NAME}.title`,
defaultMessage: "title",
},
description: {
name: `${NAME}.description`,
defaultMessage: "description",
},
property: 'stringvalue',
};
const anotherObject = {
name: `${NAME}.other`,
defaultMessage: "other",
}
Мне нужно вытащить все объекты, которые имеют свойство "defaultMessage". Для сопоставителя у меня есть:
/\{([\s\S]*?)defaultMessage([\s\S]*?)\}/g
Это соответствует anotherObject и myobject.description правильно, но для myobject.title он получает все от первого {
до foo. Например:
{ foo } from "blah";
import { bar, baz } from "../module";
const myobject = {
name: NAME,
title: {
name: `${NAME}.title`,
defaultMessage: "Main",
}
Как я могу получить это для ленивого соответствия, так что я получаю только:
{
name: `${NAME}.title`,
defaultMessage: "Main",
}
Обновление: я буду использовать узел для разбора файлов javascript, так что я получил доступ к негативным взглядам за спиной, безуспешно пробовал следующее:
(?<!\{[\s\S]+?)\{([\s\S]+?)defaultMessage([\s\S]*?)\}