Выстрел Ответ: Regex в одиночку не может решить эту проблему
Регулярные выражения являются неправильный инструмент для работа, потому что вы имеете дело с вложенными структурами, то есть с рекурсией. Вы можете использовать регулярные выражения и стек, чтобы сделать это
Вот как вы можете сделать это
//function that matches outer most paranthesis
function matchOuterBracket(str) {
let re = /\(|\)/gi
let stack = []
let startI = -1,
endI = -1
while (match = re.exec(str)) {
if (match[0] == '(') {
stack.push(match.index)
} else {
startI = stack.pop()
}
if (stack.length == 0) {
endI = match.index
break
}
}
if (startI == undefined ||
startI == -1 ||
endI == -1 ||
endI == undefined) {
return ""
}
return str.slice(startI +1 , endI)
}
//testing
var str = `create or replace procedure SYSPROC.Q2SPJ016(
p_SLNO in INTEGER,
p_HIRE_DATE in DATE,
p_BUSINESS_GROUP in VARCHAR(25)
)`
console.log(matchOuterBracket(str))
Возможно лучше использовать SQL-анализатор, а не прокатке самостоятельно ... –
@loveToCode Вы не можете изменить регулярное выражение, чтобы соответствовать этому, поскольку оно требует рекурсии. Я добавил функцию, которая делает это с использованием регулярных выражений и стека. Если это поможет вам решить проблему –