判断字符串中的括号是否匹配:
以下是输出例子
(){}[] //true
({)} //false
( // false
其中括号内是还含有别的内容的
例如:
const str = 'function dsadas(ewqeqw, ewqeqw) { ewqeqwe [ewqe, {a: [ewq]}](ewqe){ewq}}(ewq)'
所以我的思路是
1、首先过滤掉其余字符,只留下括号
str = string.match(/[\(\)\[\]\{\}]*/g).join('')
// (){[{[]}](){}}()
2、再把成对的括号给过滤掉 (),[],{}
str.replace(/\{\}/g, '').replace(/\(\)/g, '').replace(/\[\]/g, '')
// {[{}]}
3、如果还存在成对的括号,就继续过滤
4、判断剩余字符是否为空
if (newStr === '') return true //为空则括号合理
下面是整段代码思路:
function matchBrackets (string) {
// 过滤多余字符
let str = string.match(/[\(\)\[\]\{\}]*/g).join('')
//括号总数为奇数则为 false
if (str.length % 2 !== 0) return false
// 过滤已成对的括号:(),{},[]
let newStr = str.replace(/\{\}/g, '').replace(/\(\)/g, '').replace(/\[\]/g, '')
//没有嵌套 且已经过滤为空 返回 true
if (newStr === '') return true
// 剩余字符无法拼成括号,返回 false
if (newStr.indexOf('{}') === -1 && newStr.indexOf('()') === -1 && newStr.indexOf('[]') === -1) return false
// 否则继续过滤
return matchBrackets(newStr)
}
可能有更好的思路,但是本人能力有限,暂时只有这个思路