Skip to content

Instantly share code, notes, and snippets.

@gleba
Created August 20, 2019 08:42
Show Gist options
  • Save gleba/15f47cf98b969e6902ecb696709c05ad to your computer and use it in GitHub Desktop.
Save gleba/15f47cf98b969e6902ecb696709c05ad to your computer and use it in GitHub Desktop.
openBracketsAreClosed
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