function extractSubExpressions(str: string): string[] { const stack: number[] = []; const subExpressions: string[] = []; for (let i = 0; i < str.length; i++) { if (str[i] === "(") { stack.push(i); } else if (str[i] === ")") { if (stack.length === 0) { throw new Error("Invalid expression: Incorrect bracket placement"); } const startIndex = stack.pop()!; const subExpression = str.substring(startIndex, i + 1); const replaceStr = subExpression.substr(1,subExpression.length-2) subExpressions.push(replaceStr); } } if (stack.length !== 0) { throw new Error("Invalid expression: Unclosed brackets"); } return subExpressions; } const str = 'a+b*(d-e)*c+(((b+a)+f)+g)'; const result = extractSubExpressions(str); console.log(result); // ['d-e', 'b+a', '(b+a)+f', '((b+a)+f)+g']