问题:就是将()()()((())())换成[][][[[]][]]的那种了,处理括弧配对用的
作者:infinte
要求:
[1]支持任意的“括弧”,也就是可以用【】{}()……或者类似XML的:、[cc][cc:over]、{ttt] [ttt}
[2]严格按照层次匹配,就是(a)b(c(d)e)换成[a]b[c[d]e]而非[a]b[c(d]e) (结束太早了)
[3]左括号比右括号多时,保留多余的括号,即:()()((()()) → [][]([[][]]
[4]右括号比左括号多,保留多余的括号,即:(()()(()()))))) → [[][][[][]]])))
方案一:使用堆栈
作者:winter
代码:
<script> <BR>var strArr = "()()((()())"; <br><br>function change(str) <BR>{ <BR> var a=str.split(""); <BR> var c=0; <BR> var stack=[]; <BR> var match={ <BR> "(":")", <BR> "{":"}", <BR> "<":">", <BR> "【":"】" <BR> } <BR> for(var i=0;i<a.length;i++) <BR> if(match[a[i]]){ <BR> stack.push([a[i],i]); <BR> } <BR> else if(a[i]==")"||a[i]=="}"||a[i]==">"||a[i]=="】"){ <BR> if(!stack.length)continue; <BR> var tmp=stack.pop(); <BR> if(match[tmp[0]]==a[i])a[i]="]",a[tmp[1]]="["; <BR> else stack.push(tmp); <BR> } <BR> return a.join("") ; <BR>} <BR>alert(change(strArr)); <BR></script>
方案二:使用正则
作者:月影
代码:
<script> <BR>var strArr = "()()((()())"; <BR>var o = strArr; <BR>var r = o; <BR>do{ <BR> o = r; <BR> r = o.replace(/\(([^()]*)\)/g,function(s,a){return '['+a+']'}); <BR>}while(o!=r); <BR>alert(r); <BR></script>
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn