js 替换


Posted in Javascript onFebruary 19, 2008

问题:就是将()()()((())())换成[][][[[]][]]的那种了,处理括弧配对用的
作者: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>  
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> 
Javascript 相关文章推荐
用于判断用户注册时,密码强度的JS代码
Jan 01 Javascript
javascript 操作Word和Excel的实现代码
Oct 26 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
Sep 10 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
关于javascript中dataset的问题小结
Nov 16 Javascript
JavaScript预解析及相关技巧分析
Apr 21 Javascript
JQuery.validationEngine表单验证插件(推荐)
Dec 10 Javascript
JavaScript用JSONP跨域请求数据实例详解
Jan 06 Javascript
基于JavaScript实现多级菜单效果
Jul 25 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
Aug 26 Javascript
vue.js 中使用(...)运算符报错的解决方法
Aug 09 Javascript
javascript中可能用得到的全部的排序算法
Mar 05 Javascript
javascript replace方法与正则表达式
Feb 19 #Javascript
window.addeventjs事件驱动函数集合addEvent等
Feb 19 #Javascript
setAttribute 与 class冲突解决
Feb 17 #Javascript
setInterval 和 setTimeout会产生内存溢出
Feb 15 #Javascript
一个js封装的不错的选项卡效果代码
Feb 15 #Javascript
ImageFlow可鼠标控制图片滚动
Jan 30 #Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 #Javascript
You might like
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
php获取系统变量方法小结
2015/05/29 PHP
JavaScript中的事件处理
2008/01/16 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
对python多线程与global变量详解
2018/11/09 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
新领导上任欢迎词
2014/01/13 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
工厂见习报告范文
2014/10/31 职场文书
门面房租房协议书
2014/12/01 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python
python基础之模块的导入
2021/10/24 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js
mysql序号rownum行号实现方式
2022/12/24 MySQL