2017-01-03 2 views
0

Для примера в строке:RegExp, чтобы найти строку только в первых круглых скобках?

create or replace procedure SYSPROC.Q2SPJ016(
p_SLNO in INTEGER, 
p_HIRE_DATE in DATE, 
p_BUSINESS_GROUP in VARCHAR(25) 
) 

Желаемая Выход:

p_SLNO in INTEGER, 
p_HIRE_DATE in DATE, 
p_BUSINESS_GROUP in VARCHAR(25) 
+0

Возможно лучше использовать SQL-анализатор, а не прокатке самостоятельно ... –

+0

@loveToCode Вы не можете изменить регулярное выражение, чтобы соответствовать этому, поскольку оно требует рекурсии. Я добавил функцию, которая делает это с использованием регулярных выражений и стека. Если это поможет вам решить проблему –

ответ

1

Выстрел Ответ: 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))

Смежные вопросы