方法一、数据结构法
思路:顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈;
当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断;
若当前栈顶元素与当前扫描的括号不匹配,则左右括号配对次序不正确;
若字符串当前为某种类型的右括号而堆栈已经空,则右括号多于左括号;
字符串循环扫描结束时,若堆栈非空(即堆栈尚有某种类型的左括号),则说明左括号多于右括号;
否则,括号配对正确。
代码:
<script> function validParentheses(str) { var arr=str.split(''); var newArr=[]; for(var i=0;i<arr.length;i++){ // 顺序读取字符串 if(arr[i]==='('||arr[i]==='['||arr[i]==='{'){ // 遇到左括号进栈 newArr.push(arr[i]); } if(arr[i]===']'){ // 如果遇到有括号,出栈,看栈顶元素是否匹配 if( newArr.pop()==='['){ continue; }else { return false; } } if(arr[i]===')'){ if( newArr.pop()==='('){ continue; }else { return false; } } if(arr[i]==='}'){ if( newArr.pop()==='{'){ continue; }else { return false; } } } console.log('============',newArr); return newArr.length===0?true:false // 最后栈空则匹配成功 } var str='([{}])'; console.log(validParentheses(str)) // true </script>
方法二:正则表达式法
<script> // test var reg=/^\({3}\){3}$/; var str='(((})))'; console.log("=========",reg.test(str)); // match 'hello(lichuyan is 18)'.match(/\((.+)\)/g); console.log(RegExp.$1); // dsfasjfj3124123 var str2='hello(lichuyan is 18)'.replace(/\((.+)\)/g,'xiaohua'); console.log('strww',str2) </script>