js 替换
js 替换
发布时间:2016-12-30 来源:查字典编辑
摘要:问题:就是将()()()((())())换成[][][[[]][]]的那种了,处理括弧配对用的作者:infinte要求:[1]支持任意的“括...

问题:就是将()()()((())())换成[][][[[]][]]的那种了,处理括弧配对用的

作者: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>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类