js 替换

时间:2021-05-26

问题:就是将()()()((())())换成[][][[[]][]]的那种了,处理括弧配对用的
作者:infinte
要求:
[1]支持任意的“括弧”,也就是可以用【】<>{}()……或者类似XML的:<a></a>、[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>
varstrArr="()()((()())";

functionchange(str)
{
vara=str.split("");
varc=0;
varstack=[];
varmatch={
"(":")",
"{":"}",
"<":">",
"【":"】"
}
for(vari=0;i<a.length;i++)
if(match[a[i]]){
stack.push([a[i],i]);
}
elseif(a[i]==")"||a[i]=="}"||a[i]==">"||a[i]=="】"){
if(!stack.length)continue;
vartmp=stack.pop();
if(match[tmp[0]]==a[i])a[i]="]",a[tmp[1]]="[";
elsestack.push(tmp);
}
returna.join("");
}
alert(change(strArr));
</script>

方案二:使用正则
作者:月影
代码:
复制代码 代码如下:
<script>
varstrArr="()()((()())";
varo=strArr;
varr=o;
do{
o=r;
r=o.replace(/\(([^()]*)\)/g,function(s,a){return'['+a+']'});
}while(o!=r);
alert(r);
</script>

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章