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>