Created
August 20, 2019 08:42
-
-
Save gleba/15f47cf98b969e6902ecb696709c05ad to your computer and use it in GitHub Desktop.
openBracketsAreClosed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let haveABrackets = /[\[\]()<>]/ | |
const openBracketsAreClosed = { | |
'(': /\(([^)]+)\)/, | |
'<': /<([^>]+)>/, | |
'[': /\[([^\]]+)]/, | |
} | |
const closeBrackets = { | |
'(': ")", | |
'<': ">", | |
'[': "]", | |
} | |
function verify(s: string) { | |
let have = haveABrackets.exec(s) | |
if (have) { | |
let openBracket = have[0] | |
let getMiddle = openBracketsAreClosed[openBracket] | |
if (getMiddle) { | |
let haveMiddle = getMiddle.exec(s) | |
if (haveMiddle) { | |
let middle = haveMiddle[0] | |
if (middle.length>3){ | |
return verify(middle.slice(1, -1)) | |
} else if (middle.length == 2){ | |
return middle[1] === closeBrackets[openBracket] | |
} | |
} | |
if (s.length>have.index){ | |
return s[have.index+1] === closeBrackets[openBracket] | |
} | |
return false | |
} | |
return false | |
} | |
return true | |
} | |
test('', ({ plan, ok, end, pass, fail, equal }) => { | |
ok(verify('---(++++)----'), true) //-> 1 | |
ok(verify(''), true) //-> 1 | |
ok(verify('before ( middle []) after '), true) //-> 1 | |
ok(!verify(') ('), false) //-> 0 | |
ok(!verify('<( >)'), false) //-> 0 | |
ok(!verify(' ( [)'), false) //-> 0 | |
end() | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment