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

より良いを行うことができます方法です... –

+0

を行うには、正規表現とスタックを使用することができます@loveToCodeあなたは再帰が必要なので、正規表現をこれに合わせて右にすることはできません。私は正規表現とスタックを使用してこれを行う関数を追加しました。 –

答えて

1

ショット回答正規表現だけで

正規表現は間違ったツールです。この問題を解決することはできませんネストされた構造、すなわち再帰を扱っているので、ジョブ。あなたはこの

ここ

あなたはSQLパーサーを使用のではなく、独自の圧延するためにそれを

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

おそらく
関連する問題