简单说明:
1.参数是一个数组,数组元素是字符串, 例如:['{}[]()', '{]}','{{[]}}', '[(}[]', '{}[]()[{()}]', '[()]{}{[()]}[]', '{{([()[]{}])[()]}}'], ['{this is a demo, (just for test)}'];
2.检测的括号都是英文状态下的,包括大括号{}、中括号[]、小括号();
3.这个方法的性能并不是特别的好,追求性能的话需要自己根据实际业务情况进行优化改动;
4.方法使用的是原生js写的,没有使用其他的库;
5.输出结果为与输入结果对照顺序的YES和NO字符串,YES表示该数组元素字符串中出现的括号是匹配的,NO则说明该数组元素字符串中的括号是不匹配的。
方法全文:
function isMatch(values) {
let result = [];
values.forEach(value => {
let arr = [];
const temp = ['{', '}', '[', ']', '(', ')'];
value.split('').forEach(val => {
temp.forEach(tempVal => {
if (val === tempVal) {
arr.push(val);
}
})
})
let len = arr.length;
if (len % 2 === 1) {
result.push('NO');
return;
}
for (let index = 0; index < len;) {
if (
(arr[index] === '{' && arr[index + 1] === '}') ||
(arr[index] === '[' && arr[index + 1] === ']') ||
(arr[index] === '(' && arr[index + 1] === ')')
) {
arr.splice(index, 2);
index = 0;
} else {
index += 1;
}
len = arr.length;
}
if (arr.length === 0) {
result.push('YES');
} else {
result.push('NO');
}
})
return result;
}
PS:这个方法本人亲测有效,可以应对各种复杂的括号组合,欢迎修改~~