Итак, я пытаюсь сделать регулярное выражение, которое будет анализировать все объявления глобальных функций, хранящихся в объектах, например, как это const a = () => {}
Я делаю что-то вроде этого:
/(?:const|let|var)\s*([A-z0-9]+)?\s*=\s(function\s*\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)|\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)\s*\=\>)\s*\{((?:[^}{]+|\{[^}{]*\}|[^}]|\}(\"|\'|\
))*)*\}/g
Работает нормально, но у меня возникла проблема с внутренним объявлением ( ссылка )
Если ссылка не работает:
const definedJsFunctionsAsObjectRegex = /(?:const|let|var)\s*([A-z0-9]+)?\s*=\s(function\s*\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)|\(([^)(]+|\((?:[^)(]+|\([^)(]*\))*\))*\)\s*\=\>)\s*\{((?:[^}{]+|\{[^}{]*\}|[^}]|\}(\"|\'|\`))*)*\}/g;
const str = `
let f = function(a,b) {
console.log(gdhfsgdfg);
}
const f2 = (a,b, d) => { blabla }
let f3 = function(){
fdgdhgf
}
function test() {
const inner = (t, b) => { im must be undetected}
const inner2 = function (a,b) {
im must be undetected too
}
}
// here checking for }"
function(fds) { obj = {} return "}" }
function r () { obj = {}; a = []; }
function a(){console.log('a')} function b(){console.log('b')}
`;
let matches = [...str.matchAll(definedJsFunctionsAsObjectRegex)];
console.log(matches)
Итак, есть идеи, как исключить объявления внутренних функций?
Я пробовал смотреть в будущее (?!), Но мои эксперименты не дали желаемого результата.