js置換


問題:()(()()()()を[][][]][]]][]][]に変えたものです。括弧のペアを扱う作者:infintの要求:[1]は任意の括弧をサポートします。つまり[]<>{}()…………あるいはXMLのようなものが使えます。 [ttt-[2]厳格にレベルによってマッチングします。つまり(a)b(c(d)e)を[a]b[/d]eではなく[a]b[c]e]に変えます。 (終了が早すぎます)[3]左括弧が右括弧より多い場合、余分な括弧を残します。すなわち:()(()() → [][]([[][]] [4)右括弧は左括弧より多く、余った括弧を保持する()(()(()()())))))))))))))。 → [[][][[][]]]))) 方案一:スタックを使用する作者:winderコード:

<script> 
var strArr = "()()((()())"; 

function change(str) 

 var a=str.split(""); 
 var c=0; 
 var stack=[]; 
 var match={ 
 "(":")", 
 "{":"}", 
 "<":">", 
 "【":"】" 
 } 
 for(var i=0;i<a.length;i++) 
 if(match[a[i]]){ 
 stack.push([a[i],i]); 
 } 
 else if(a[i]==")"||a[i]=="}"||a[i]==">"||a[i]=="】"){ 
 if(!stack.length)continue; 
 var tmp=stack.pop(); 
 if(match[tmp[0]]==a[i])a[i]="]",a[tmp[1]]="["; 
 else stack.push(tmp); 
 } 
 return a.join("") ; 

alert(change(strArr)); 
</script> 
案二:正規の著者を使用する:月影コード:

<script> 
var strArr = "()()((()())"; 
var o = strArr; 
var r = o; 
do{ 
 o = r; 
 r = o.replace(/\(([^()]*)\)/g,function(s,a){return '['+a+']'}); 
}while(o!=r); 
alert(r); 
</script>