2017-01-03 79 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

射擊答正則表達式不能單獨解決這個問題

正則表達式是錯誤的工具因爲你正在處理嵌套結構,即遞歸。您可以使用正則表達式和堆棧來做到這一點

這裏是你可以怎麼做

//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))

相關問題